我有一个包含3个字段的表格:DONOR_CONTACT_ID,
RECIPIENT_CONTACT_ID
,ORDER_NUMBER
。我想按照我的查询DONOR_CONTACT_ID
按升序排序Q_RECIPIENT_SORT
。然后我想使用临时变量来检查记录是否具有相同的DONOR_CONTACT_ID
,然后显示一条消息(大多数记录具有相同的DONOR_CONTACT_ID
)。我的程序完成它应该做的一切,但最后它总是会出现一个错误,上面写着“No Current Record”。这是我的代码:
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
我认为当没有更多记录时,它正试图进入下一个记录。我的逻辑可能有问题。但我已经盯着它看了一段时间,我的改变没有奏效。我需要另一组眼睛来看一看。
感谢任何帮助!
答案 0 :(得分:2)
考虑当你的记录集循环在最后一行时会发生什么,然后你这样做......
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
答案 1 :(得分:0)
一般的想法是这样的:
Set rst = dbs.OpenRecordset("T_RECIPIENT_SORT", dbOpenDynaset)
Do Until rst.EOF
'do or check what you want
'....
rst.MoveNext
Loop
rst.Close