Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何使用Do While循环编写VBA?_Ms Access_Loops_Vba - Fatal编程技术网

Ms access 如何使用Do While循环编写VBA?

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()

我有一个包含3个字段的表:
捐赠者\联系人\ 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到另一条记录吗?