MSAccess:区分两个表?

时间:2019-01-11 13:42:06

标签: ms-access access-vba

我有一个任务来比较2个MSAccess表。它们的结构相同,来自第三方数据源的两次连续导出,相隔1个月(n和n + 1)。 1万条记录,35个字段。

我不一定要知道哪些字段已更新,只要记录中发生了某些变化即可。然后,我的流程将继续相应地处理目标数据库中的增量记录。

我已经ID了n + 1个数据中的插入和删除。这将是每月一次的练习。

对开始此任务有何建议?我宁愿不比较逐字段,逐行。也许等于〜校验和?

谢谢!

1 个答案:

答案 0 :(得分:0)

在Erik的建议下(如上所述),我可以确认逐个字段,逐行地遍历表并执行比较非常快。 1万行x 33字段=约1-2秒。

我需要做的一项调整是考虑n或n + 1表中插入或丢失的行。我只是简单地在[ID]上加入了2个表,消除了所有未对齐的情况,然后逐步遍历了结果记录集,比较了成对的列。

Private Sub Command0_Click()

Dim strSQL As String
Dim rs As DAO.Recordset
Dim n, i, j As Integer

' Join the 2 tables into a single recordset, side-by-side

strSQL = "SELECT TestData.*, TestData2.* FROM TestData " & _
    "INNER JOIN TestData2 ON TestData.[ID] = TestData2.[ID];"

Set rs = CurrentDb.OpenRecordset(strSQL)

'column-by-column, row-by-row, compare pairs of columns

n = rs.Fields.Count / 2

For i = 0 To n-1
    j = i + n
    If Not rs.BOF And Not rs.EOF Then
        rs.MoveFirst
        While (Not rs.EOF)
            If Not (Nz(rs.Fields(i)) = Nz(rs.Fields(j))) Then
               Debug.Print "ID " & rs.Fields(0) & " | " & rs.Fields(i).Name & " | " & rs.Fields(i) & " <> " & rs.Fields(j)
            End If
            rs.MoveNext
        Wend
    End If
    rs.MoveFirst
Next i

MsgBox "all done"

rs.Close
Set rs = Nothing

End Sub