Если у вас есть таблица 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