使用vba / sql比较访问中的所有字段

时间:2014-03-04 20:16:12

标签: sql vba ms-access comparison

我知道我可以比较两个表之间的值,但到目前为止我还不需要为超过2个或3个字段执行此操作,因此将它们各自单独比较并不是问题,我使用的代码如下: / p>

DoCmd.RunSQL "INSERT INTO Issues 
            SELECT Eligibility.[Member Id]
                 , Eligibility.[Sex Code]
                 , Eligibility.State 
            FROM Eligibility LEFT JOIN Ref 
            ON Eligibility.[Sex Code] = Ref.[Sex Code] 
            WHERE (((Ref.[Sex Code]) Is Null));"
然而,现在,我需要比较大约140个不同的领域。有没有比写140个SQL语句并逐个运行它们更好的方法呢?

我希望它找到哪些字段不包含相同的信息,然后从两个表中拉出整行,或者至少从第5列中的值,成员ID,然后我可以运行另一个查询拉如果需要的话,整个行除了该值(因此我可以同时查看两者)并将它们粘贴到另一个表中并突出显示不匹配发生的单元格。

两个表都在同一个数据库中 两个表具有相同的结构,但第二个表可能没有第一个表中的所有值,因此我需要找到一种方法,使它在开始比较行之前根据成员ID匹配行。

1 个答案:

答案 0 :(得分:1)

您可以轻松地使用DAO进行比较。使用记录集上的.Fields()参数,可以获得实际记录集中的所有不同字段。

这可以让您执行以下操作:

Sub exampleSQLComparison()

    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset

    '.... set those recordsets via SQL statements

    For Each f In rs1.Fields
        If rs1.Fields(f) <> rs2.Fields(f) Then
            Debug.Print "Mismatch found for " + f
        End If

    Next f

End Sub

如果您的查询类似且您唯一要更改的是单个字段(例如ID),您应该能够相应地修改逻辑。