2011-07-22 163 views
22

如何測試記錄集是否爲空?訪問VBA:如何測試recordSet是否爲空?一片空白?

 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" 

我打開了幾個基於select語句的記錄集。如果沒有記錄,IsNull是否會返回true?

+0

如果您的問題被回答,請記得要好好檢查你首選通過單擊對答案的左側的綠色對號使用的答案。 –

回答

33

我會檢查 「結束文件的」 標誌:

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

謝謝你這個作品! – Shubham

+11

根據您打開recordSet的方式,您可能還想嘗試一下,如果是,同時記錄集的開始和結束(即空)。然後,你會測試recordSet.EOF和recordSet.BOF。 –

+1

如果RecordSet返回1行數據,那麼BOF和EOF都是真的?我在下面跟了@ tom-studee的建議,而我檢查了'RecordCount> 0'。 –

9

RecordCount是你想要使用的。

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

同意。這允許您基於知道從查詢嘗試返回的記錄來更改處理,以便相應地更改處理。 +1 – Mohgeroth

+0

謝謝你的作品! – Shubham

+4

請注意,在這種情況下,RecordCount可能不會爲您提供準確的總記錄數。您需要執行.MoveLast才能獲得準確的計數(如果要移過記錄集,則需要使用.MoveFirst)。也就是說,如果有任何*記錄,它將大於0。底線,這個答案的作品,但你需要知道.RecordCount的特質。 – mwolfe02

0

如果不temp_rst1是沒有那麼...

+0

這不起作用。在這個例子中,temp_rst1將永遠不會成爲**,因爲它被設置在前兩行。 OP對他的記錄集中是否有記錄感興趣。其他兩個答案中的任何一個都可以實現。 – mwolfe02

+0

它與ADO正常工作。我不確定它是否適用於DAO。我用ADO以如下格式廣泛使用它:'Set temp_rst1 = temp_rst1.NextRecordset If not temp_rst1 is Nothing Then ...' – NDizzle

+0

我明白了。我對ADO做的很少,所以我會推遲在那裏的專業知識。 DAO通常建議在MS Access VBA中使用,所以我認爲這是OP運行的環境。 – mwolfe02

6

如果temp_rst1.BOFtemp_rst1.EOF然後記錄爲空。對於一個空的記錄集,鏈接的或本地的,這總是正確的。

3

一個簡單的方法就是把它寫:

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