Ms access 如何使用Do While循环编写VBA?
我有一个包含3个字段的表:Ms access 如何使用Do While循环编写VBA?,ms-access,loops,vba,Ms Access,Loops,Vba,我有一个包含3个字段的表:捐赠者\联系人\ ID、接收者\联系人\ ID、订单\编号。我想按照我对查询所做的升序排序捐赠者\联系人\ ID。然后,我想使用临时变量检查记录是否具有相同的捐赠者联系人ID,如果具有相同的ID,则显示一条消息(大多数记录具有相同的捐赠者联系人ID)。我的程序做了它应该做的一切,但在最后它总是得到一个错误,说“没有当前记录”。这是我的密码: Option Compare Database Option Explicit Function UsingTemps()
捐赠者\联系人\ ID、
接收者\联系人\ ID
、订单\编号
。我想按照我对查询所做的升序排序捐赠者\联系人\ ID
。然后,我想使用临时变量检查记录是否具有相同的捐赠者联系人ID
,如果具有相同的ID,则显示一条消息(大多数记录具有相同的捐赠者联系人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
我认为它正在试图在没有更多记录的情况下转移到下一个记录。可能是我的逻辑有问题。但我已经盯着它看了一段时间,我的改变没有起作用。我需要另一双眼睛来看看它
感谢您的帮助 总体思路如下:
Set rst = dbs.OpenRecordset("T_RECIPIENT_SORT", dbOpenDynaset)
Do Until rst.EOF
'do or check what you want
'....
rst.MoveNext
Loop
rst.Close
考虑一下当记录集循环位于最后一行时会发生什么,然后执行此操作
rst.MoveNext
strTemp2=rst!捐赠者\联系人\身份证
MoveNext
将记录集定位在EOF
——没有“当前”记录。因此,在下一行中,代码尝试存储当前行的捐赠者联系ID
到strTemp2
的值。但是,由于您处于EOF
,没有记录是“当前”的,因此Access会抱怨“没有当前记录”
我认为这个版本可以避免这个错误。测试逻辑,确保它也满足您的需要
rst.MoveFirst
strTemp1=rst!捐赠者\联系人\身份证
rst.MoveNext
'strTemp2=rst!捐赠者\联系人\身份证
“别着急!施主联系人ID=rst.EOF
不使用rst.EOF时执行此操作
strTemp2=rst!捐赠者\联系人\身份证
如果strTemp1=strTemp2,则
MsgBox“相等”
其他的
MsgBox“不相等”
如果结束
strTemp1=strTemp2
rst.MoveNext
'strTemp2=rst!捐赠者\联系人\身份证
环
谢谢您的帮助!不过我还是犯了同样的错误。rst.EOF究竟是如何工作的?因为它不能在最后一条记录上运行循环,但是当没有任何记录时,它会尝试rst.MoveNext到另一条记录吗?