如何合并来自两个单独的访问2007数据库的数据

时间:2010-04-19 20:41:30

标签: database ms-access import export ms-access-2007

我有两个相同的数据库,结构相同,数据库a在计算机a中,数据库b在计算机b中。

数据库a ****(a.accdb)****和数据库b ****(b.accdb)****的数据不同。然后在数据库中我有例如ID:1,2,3,在数据库B中我有ID:4,5,6

然后我需要在一个数据库中合并这些数据库数据(a或b,无所谓),所以最终的数据库看起来像。 ID:1,2,3,4,5,6

我搜索一个简单的方法来做到这一点。因为我有很多桌子。通过联合查询执行此操作非常繁琐。

我只搜索没有方案的数据的备份选项,例如postgreSQl或许多其他RDBMS,但我在访问2007中没有看到这个选项。

pd:只有表可能有重复值(我猜pk不允许复制重复值,所有其他值都将被复制好)。如果我错了,请纠正我。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果你有一个表,tblFoo,在两个数据库中具有相同的结构,你可以尝试将一个表的内容附加到另一个表中。所以打开a.accdb:

INSERT INTO tblFoo
SELECT *
FROM tblFoo IN 'C:\YourPath\b.accdb';

实际上我怀疑这种方法对你有用,因为你提到了主键和重复。也许你会更好地将来自tblFoo的两个副本的内容附加到第三个表tblFooMaster中,该表没有任何主键或唯一约束。在这种情况下,你必须弄清楚你想用tblFooMaster中的重复项做什么。

我希望您在尝试任何形式的合并之前备份这两个数据库。

修改:如果该方法令人满意,则无需为每个表创建查询。使用VBA为您构建和执行查询。

Public Sub ImportTableData(ByVal pstrTable As String, _
        ByVal pstrDb As String)

    Dim strSql As String
    strSql = "INSERT INTO " & pstrTable & vbNewLine & _
        "SELECT *" & vbNewLine & _
        "FROM " & pstrTable & " IN '" & pstrDb & "';"
    'caller will handle errors '
    CurrentDb.Execute strSql, dbFailOnError
End Sub

由于您希望将表传输作为单个操作进行,因此您可以使用另一个VBA过程将表名提供给ImportTableData过程。

Public Sub ImportAllTables()
    Const cstrDb As String = "C:\YourPath\b.accdb"
    Dim tdf As TableDef
    Dim strMsg As String

On Error GoTo ErrorHandler

    For Each tdf In CurrentDb.TableDefs
        'ignore system and temporary tables '
        If Not (tdf.Name Like "MSys*" Or _
                tdf.Name Like "~*") Then
            Call ImportTableData(tdf.Name, cstrDb)
        End If
    Next tdf

ExitHere:
    On Error GoTo 0
    Set tdf = Nothing
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 3078
        strMsg = "Input table " & tdf.Name & " not found."
        MsgBox strMsg
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure ImportAllTables"
        MsgBox strMsg
        GoTo ExitHere
    End Select
End Sub