【发布时间】:2010-11-04 04:32:21
【问题描述】:
set recordsetname = databasename.openrecordset(SQLString)
if recordsetname.bof <> true and recordsetname.eof <> true then
'do something
end if
2 个问题:
上述测试可能会错误地评估为假,但很少见 (我有一个潜伏在我的代码中,但它今天失败了,我相信这是 5 年来日常使用中的第一次——这就是我发现它的方式)。为什么对于非空记录集,bof/eof 中的一个偶尔会为真。它似乎如此罕见,以至于我想知道它为什么会发生。
-
这是一个万无一失的替代品吗:
if recordsetname.bof <> true or recordsetname.eof <> true then
编辑以添加代码细节:
客户有订单,每个订单以BeginOrder 商品开头,以EndOrder 商品结尾,中间是订单中的商品。
SQL 是:
' ids are autoincrement long integers '
SQLString = "select * from Orders where type = OrderBegin or type = OrderEnd"
Dim OrderOpen as Boolean
OrderOpen = False
Set rs = db.Openrecordset(SQLString)
If rs.bof <> True And rs.eof <> True Then
myrec.movelast
If rs.fields("type").value = BeginOrder Then
OrderOpen = True
End If
End If
If OrderOpen F False Then
'code here to add new BeginOrder Item to Orders table '
End If
ShowOrderHistory 'displays the customer's Order history '
在这种情况下看起来这个
BeginOrder
Item a
Item b
...
Item n
EndOrder
BeginOrder
Item a
Item b
...
Item n
EndOrder
BeginOrder
Item a
item b
...
Item m
BeginOrder <----should not be there as previous order still open
【问题讨论】:
-
这只是对单个表的简单选择,在它失败的情况下/应该返回大约十几个记录。
-
“bof/eof 之一为真”——你的意思是异或(“使用异或逻辑对两个表达式进行逐位比较”),即一个为真,另一个为假?
-
我认为这只是一个普通的 OR,(即一个或两个)
-
我曾经和一位业务分析师一起工作,他会使用“和”这个词来编写 OR 逻辑,例如“……可以是这个,也可以是那个……”