2

DONOR_CONTACT_ID, RECIPIENT_CONTACT_ID、の 3 つのフィールドを持つテーブルがありますORDER_NUMBERDONOR_CONTACT_IDquery で行った昇順でソートしたい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--- "current"に配置するレコードはありません。そのため、次の行で、コードは現在の行のDONOR_CONTACT_IDから への値を格納しようとしstrTemp2ます。ただし、 にいるため、 "current"EOFのレコードがないため、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

一般的な考え方は次のとおりです。

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 に答える