2

我有一个包含 3 个字段的表:DONOR_CONTACT_ID, RECIPIENT_CONTACT_ID, ORDER_NUMBER. 我想DONOR_CONTACT_ID按我对查询所做的升序排序Q_RECIPIENT_SORT。然后我想使用临时变量来检查记录是否相同,如果有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

我认为当没有更多记录时,它正试图移动到下一条记录。可能我的逻辑有问题。但我已经盯着它看了一段时间,我的改变没有奏效。我需要另一双眼睛来看看它。

任何帮助表示赞赏!

4

2 回答 2

2

考虑当您的记录集循环位于最后一行时会发生什么,然后您执行此操作...

rst.MoveNext
strTemp2 = rst!DONOR_CONTACT_ID

MoveNext将记录集定位在EOF--- no record is "current"。因此,在下一行中,代码尝试将当前行的值存储DONOR_CONTACT_IDstrTemp2. 但是,由于您在EOF,没有记录是"current",因此 Access 会抱怨"No Current Record"

我认为这个版本会避免这个错误。测试逻辑以确保它也能满足您的需求。

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
于 2013-07-11T16:06:09.313 回答
0

The general idea is as this:

Set rst = dbs.OpenRecordset("T_RECIPIENT_SORT", dbOpenDynaset)

Do Until rst.EOF
  'do or check what you want 
  '....
  rst.MoveNext
Loop
rst.Close
于 2013-07-11T14:49:49.880 回答