比较VBA Access中的表

时间:2014-11-14 19:11:49

标签: sql vba ms-access access-vba

我正在尝试比较VBA访问中的两个表,以查看是否有一个需要添加到另一个中的新客户端。我开始开发比较循环但由于某种原因它不起作用。它表示客户端ID字段对于一个表中的所有记录的值为6,这不是真的。我不确定我是否在If声明中引用它。对此主题的任何帮助将不胜感激。

dte = InputBox("What date was the Data Dump run?", "Please Input a date")

tableName = "FN_DataDump_ALL_" & dte
Set dataDump = db.OpenRecordset(tableName, dbOpenDynaset, dbEditAdd)
Set clientTable = db.OpenRecordset("Clients", dbOpenDynaset, dbEditAdd)
With dataDump
    .MoveFirst
    Do
    If dataDump("[Client ID]") <> clientTable("[Client ID]") Then
         MsgBox (dataDump("[Client ID]"))
    clientTable.MoveNext
    Else: MsgBox ("Match.")
    .MoveFirst
End If
    Loop Until .EOF
End With

更新:

出于某种原因,VBA一直说它无法正确地打开DataDump表,而且正确地打开了所有内容。我试图运行SQL时抛出此错误,所以我认为我的声明有问题。

Set db = CurrentDb


dte = InputBox("What date was the Data Dump run?", "Please Input a date")

tableName = "FN_DataDump_ALL_" & dte
Set DataDump = db.OpenRecordset(tableName, dbOpenDynaset, dbEditAdd)
Set clientTable = db.OpenRecordset("Clients", dbOpenDynaset, dbEditAdd)


MySQL = "SELECT DISTINCT CL.[Client ID] " & _
        "INTO Clients " & _
        "FROM Clients AS CL " & _
        "Where CL.[Client ID] NOT IN (SELECT DD.[Client ID] FROM  DataDump AS DD) "

更新#2:

现在它说我有语法错误,我真的很困惑它是什么。

"Where CL.[Client ID] NOT IN (SELECT DD.[Client ID] ""FROM"" &  tableName ""as DD"") "

2 个答案:

答案 0 :(得分:3)

首先,你有 .MoveFirst ,你应该有一个 .MoveNext

但是,更好的方法是使用NOT IN查询。我会这样做:

tableName = "FN_DataDump_ALL_" & dte
Set dataDump = db.OpenRecordset(tableName, dbOpenDynaset, dbEditAdd)
Set clientTable = db.OpenRecordset("Clients", dbOpenDynaset, dbEditAdd)

MySQL = "SELECT DISTINCT CL.[Client ID] " & _
    "INTO TempClients " & _
    "FROM Clients AS CL " & _
    "Where CL.[Client ID] NOT IN (SELECT DD.[Client ID] FROM " & tableName & " AS DD) "

DoCmd.RunSQL (MySQL)

现在,您已在数据集中获得名为“rec”的客户端ID列表。这比循环遍历每个记录和比较ID更有效,除非你的表非常小,然后熟练程度的差异可以忽略不计。

答案 1 :(得分:0)

我同意约翰尼的观点是一个更好的选择。 Microsoft Access实际上有一个内置的查询构建器来执行此操作,并制作了一个教程,可以在下面的链接中找到。这显然不会直接转换为VBA,但您可以构建查询或在VBA代码中使用它。

Find records without matches