如何测试recordSet是否为空?一片空白?

Shu*_*ham 26 ms-access access-vba

如何测试记录集是否为空?

        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"
Run Code Online (Sandbox Code Playgroud)

我正在根据select语句打开几个记录集.如果没有记录,IsNull会返回true吗?

mwo*_*e02 41

我会检查"文件结束"标志:

If temp_rst1.EOF Or temp_rst2.EOF Then MsgBox "null"
Run Code Online (Sandbox Code Playgroud)

  • 根据您打开recordSet的方式,您可能还想尝试它,同时是记录集的开头和结尾(即空).然后,您将测试recordSet.EOF和recordSet.BOF. (11认同)
  • 如果 RecordSet 返回 1 行数据,那么 BOF 和 EOF 是否都为真?我遵循了下面的@tom-studee 建议,而是检查了“RecordCount > 0”。 (2认同)

Tom*_*dee 11

RecordCount是您想要使用的.

If Not temp_rst1.RecordCount > 0 ...
Run Code Online (Sandbox Code Playgroud)

  • 对于空记录集,DAO记录计数始终不准确.决不.也就是说,如果它为零,你知道它是空的而不会改变.这是100%可靠的,而且一直都是.此外,如果它是任何大于0的数字,你知道它是一个非空的记录集 - 100%可靠.因此,没有任何理由调用.MoveLast的开销只是为了找出Recordset是否为空. (9认同)
  • -1:`Recordcount> 0`在某些ODBC附加表上不起作用,因为它可能返回-1.`<> 0`可以工作,但是在拥有数百万行的Oracle表上可能需要花费很多时间. (8认同)
  • 请注意,在这种情况下,RecordCount可能无法为您提供准确的总记录数.你需要做一个.MoveLast来获得准确的计数(如果你想在记录集中移动,则需要.MoveFirst).也就是说,如果有*任何*记录,它将大于0.最重要的是,这个答案有效,但您需要了解.RecordCount的特性. (4认同)

小智 8

如果temp_rst1.BOFtemp_rst1.EOF再记录是空的.对于空记录集,链接或本地记录,这总是如此.