我有一个包含 3 个字段的表:DONOR_CONTACT_ID、
RECIPIENT_CONTACT_ID
、ORDER_NUMBER
。我想按照查询 Q_RECIPIENT_SORT
的升序对 DONOR_CONTACT_ID
进行排序。然后我想使用临时变量来检查记录是否具有相同的 DONOR_CONTACT_ID
,如果有则显示一条消息(大多数记录具有相同的 DONOR_CONTACT_ID
) 。我的程序做了它应该做的一切,但最后它总是收到一个错误,提示“没有当前记录”。这是我的代码:
Option Compare Database
Option Explicit
Function UsingTemps()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTemp1 As Long
Dim strTemp2 As Long
DoCmd.SetWarnings False
DoCmd.OpenQuery ("Q_RECIPIENT_SORT")
DoCmd.OpenTable ("T_RECIPIENT_SORT")
DoCmd.SetWarnings True
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("T_RECIPIENT_SORT", dbOpenTable)
rst.MoveFirst
strTemp1 = rst!DONOR_CONTACT_ID
rst.MoveNext
strTemp2 = rst!DONOR_CONTACT_ID
Do While Not (rst!DONOR_CONTACT_ID = rst.EOF)
If strTemp1 = strTemp2 Then
MsgBox ("Equal")
Else
MsgBox ("Not equal")
End If
strTemp1 = strTemp2
rst.MoveNext
strTemp2 = rst!DONOR_CONTACT_ID
Loop
Set dbs = Nothing
End Function
我认为问题出在以下几行:
rst.MoveNext
strTemp2 = rst!DONOR_CONTACT_ID
我认为当没有更多记录时,它正在尝试移至下一条记录。可能我的逻辑有问题。但我已经盯着它看了一段时间了,我的改变并没有起作用。我需要另一双眼睛来审视它。
感谢任何帮助!
最佳答案
考虑一下当您的记录集循环位于最后一行时会发生什么,然后您执行此操作...
rst.MoveNext
strTemp2 = rst!DONOR_CONTACT_ID
MoveNext
将记录集定位于 EOF
--- 没有记录是“当前”。因此,在下一行中,代码尝试将当前行的 DONOR_CONTACT_ID
中的值存储到 strTemp2
。但是,由于您处于EOF
,没有记录是“当前”,因此 Access 会提示“没有当前记录”。
我认为这个版本将避免这个错误。测试逻辑以确保它也能满足您的需要。
rst.MoveFirst
strTemp1 = rst!DONOR_CONTACT_ID
rst.MoveNext
'strTemp2 = rst!DONOR_CONTACT_ID
'Do While Not rst!DONOR_CONTACT_ID = rst.EOF
Do While Not rst.EOF
strTemp2 = rst!DONOR_CONTACT_ID
If strTemp1 = strTemp2 Then
MsgBox "Equal"
Else
MsgBox "Not equal"
End If
strTemp1 = strTemp2
rst.MoveNext
'strTemp2 = rst!DONOR_CONTACT_ID
Loop
关于ms-access - 如何用 Do While 循环编写 VBA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596385/