2011-07-22 16 views
22

nasıl test edebilirim?VBA'ya Erişim: recordSet'in boş olup olmadığı nasıl test edilir? ısnull? Bir kayıt kümesi boş olup olmadığını

 Dim temp_rst1 As Recordset 
     Dim temp_rst2 As Recordset 

     Set temp_rst1 = db.OpenRecordset("SELECT * FROM ORDER_DATA WHERE SKUS_ORDERED = '" & curSKU1 & "' AND [ORDER] = " & curOrder) 
     Set temp_rst2 = db.OpenRecordset("SELECT * FROM ORDER_DATA WHERE SKUS_ORDERED = '" & curSKU2 & "' AND [ORDER] = " & curOrder) 

     If IsNull(temp_rst1) Or IsNull(temp_rst2) Then MsgBox "null" 

Seçme ifadesine göre birkaç kayıt kümesi açıyorum. Kayıt yoksa, IsNull geri döner mi?

+0

Sorunuzun yanıtını ise, düzgün cevap sol tarafındaki yeşil onay tıklayarak kullanmayı tercih cevabı lütfen kontrol etmeyi unutmayınız. –

cevap

33

Ben bayrak "Dosya sonu" kontrol ediyorum: Değil temp_rst1 Hiçbir şey Sonra mı

If temp_rst1.EOF Or temp_rst2.EOF Then MsgBox "null" 
+1

Bu çalışmalara teşekkürler! – Shubham

+11

Kayıt'dan açıyoruz şekilde bağlı olarak, aynı zamanda eğer başlayacak ve kayıt (yani boş) sonu aynı anda, denemek isteyebilirsiniz. Ardından, recordSet.EOF ve recordSet.BOF test edeceksiniz. –

+1

Bir RecordSet, 1 satırlık veriyi döndürürse, hem BOF hem de EOF doğru olur mu? Aşağıda @ tom-studee tavsiyelerini takip ettim ve bunun yerine 'RecordCount> 0 'kontrol ediyorum. –

9

RecordCount kullanmak istediğiniz şeydir.

If Not temp_rst1.RecordCount > 0 ... 
+0

Anlaşmalı. Bu, işleminizi, işleme girişimi tarafından döndürülen kayıtları bildiğine göre değiştirmenize izin vererek işleme değiştirmenizi sağlar. +1 – Mohgeroth

+0

Bu çalışmalara teşekkür ederim! – Shubham

+4

Bu durumda RecordCount'un size tam bir toplam rekor sayımı sağlayamayabileceğini unutmayın. Doğru bir sayı elde etmek için bir .MoveLast (ve kayıt kümesinde hareket etmek istiyorsanız bir .MoveFirst) yapmanız gerekir. Eğer * herhangi bir * kayıt varsa, 0'dan büyük olacaktır. Alt satırda, bu cevap işe yarıyor ama .RecordCount'un özel özelliklerinden haberdar olmanız gerekiyor. – mwolfe02

0

olursa ... kayıt kümesi boş

+0

Bu işe yaramaz. temp_rst1 ** bu durumda hiçbir zaman ** hiçbir zaman olmayacak çünkü daha önce iki satır ayarlanıyor. OP, kayıt kümesinde kayıt olup olmadığı ile ilgilenir. Diğer iki cevaptan biri bunu başardı. – mwolfe02

+0

ADO ile doğru şekilde çalışıyor. DAO ile çalışıp çalışmadığından emin değilim. Ben ADO ile kapsamlı bir biçimde aşağıdaki biçimde kullanıyorum: 'Set temp_rst1 = temp_rst1.NextRecordset Temp_rst1 Değilse Hiçbir Şey Olmuyorsa ...' – NDizzle

+0

Görüyorum. ADO ile çok az şey yapıyorum, o yüzden burada uzmanlığınıza değineceğim. DAO genellikle MS Access VBA içinden kullanım için tavsiye edilir, bu yüzden OP'in çalıştığı ortamın olduğunu varsaydım. – mwolfe02

6

sonra temp_rst1.BOF ve temp_rst1.EOF edin. Bu her zaman bağlantılı veya yerel boş bir kayıt seti için geçerli olacaktır.

3

basit bir yolu onu yazmaktır:

Dim rs As Object 
Set rs = Me.Recordset.Clone 
If Me.Recordset.RecordCount = 0 then 'checks for number of records 
    msgbox "There is no records" 
End if 
İlgili konular