ms-access - 如何用 Do While 循环编写 VBA?

标签 ms-access loops vba

我有一个包含 3 个字段的表:DONOR_CONTACT_ID、 RECIPIENT_CONTACT_IDORDER_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/

相关文章:

vba - 如何在代码中 Access 控件的标签

java - 如何阻止 Java while 循环占用超过 50% 的 CPU?

python - 如何从文件中打印单行

vba - 在for循环中迭代ArrayList

vba - FormulaR1C1 不起作用

vba - 通过代码更改连接字符串

java - 如何使用jackcess将数据从数组传递到数据库

r - RODBC 包的替代方案,用于建立从 R 到 MS Access 的连接

java - 如何解决[Microsoft][ODBC Driver Manager]未找到数据源名称且未指定默认驱动程序的问题

php - 使用数组将 mysql dayofweek 整数转换为 while 循环中的工作日名称?