2011-07-22 110 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