アクセスVBAの2つのレコードセットを比較して、2つのテーブル内の値が同じかどうか、または異なるかどうかを確認しようとしています。両方のレコードセットは同じ構造体(フィールド見出し)とレコードIDを持ち、レコードのフィールド値が2番目のレコードセットの対応するフィールド値と一致するかどうかを確認しようとしています。レコードIDフィールド名はMATNRです。Access VBAのレコードセット値の比較
私は第1レコードセットのレコードとフィールドをループすることができたと思いますが、これらのレコードをループして比較する方法は不明です。また、他のレコードセットを比較するスマートな方法がありますIf rs1.Fields(fld.Name) = rs2.Fields(fld.Name)
ご協力いただければ幸いです。以下は
Public Sub VerifyRecords()
Dim rs As DAO.Recordset
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim rs3 As DAO.Recordset
Dim fld As DAO.Field
Dim sSQL As String
Dim sSQL1 As String
Dim sSQL2 As String
Set rs = CurrentDb.OpenRecordset("R2_Tables_to_Compare1") 'This table lists the upload tables to query and their corresponding target tables
Set rs3 = CurrentDb.OpenRecordset("RecordValueComparisonResults") 'Write the results of the record vlaue comparison to here
'**************************************************************************************
'This SQL statement selects all records from the upload table
sSQL = "SELECT * "
sSQL = sSQL & " FROM " & rs(0)
Set rs1 = CurrentDb.OpenRecordset(sSQL)
'**************************************************************************************
'This SQL statement selects only those records that are applicable in the target table
sSQL1 = "SELECT " & rs(1) & ".* FROM " & rs(1) & " INNER JOIN " & rs(0) & " ON " & rs(1) & ".MATNR = " & rs(0) & ".MATNR"
Set rs2 = CurrentDb.OpenRecordset(sSQL1)
'**************************************************************************************
Do While Not rs1.EOF
For Each fld In rs1.Fields
If rs1.Fields(fld.Name) = rs2.Fields(fld.Name) Then
Debug.Print rs1.Fields("MATNR"), rs2.Fields("MATNR"), fld.Name, rs1.Fields(fld.Name), rs2.Fields(fld.Name)
End If
Next fld
rs1.MoveNext
Loop
rs.Close
rs1.Close
rs2.Close
rs3.Close
Set rs = Nothing
Set rs1 = Nothing
Set rs2 = Nothing
Set rs3 = Nothing
End Sub
あなたはRDBMS内のレコードを扱っている、あなたは、ループの面で考え始める場合、あなたはそれが間違ってやっています。これが何をしているのかは、明白なSQLクエリとして表現できます。 –