2010-04-19 37 views
2

如何合併數據我有相同的結構,數據庫,計算機和數據庫B在計算機B兩個完全相同的數據庫。從兩個單獨的訪問2007和數據庫

數據庫的數據的****(a.accdb)****和數據庫B ****(b.accdb)****是不同的。然後在數據庫的AI具有例如ID:1,2,3和在數據庫B我有ID:4,5,6

然後我需要僅在一個數據庫(a或b合併這些數據庫數據,不問題),所以最終的數據庫看起來像。 ID:1,2,3,4,5,6

我尋找一個簡單的方法來做到這一點。因爲我有很多桌子。並通過聯合查詢做到這一點非常繁瑣。

我搜索例如對於只有數據的備份選項,而不計劃,作爲在PostgreSQL或許多其他RDBMS,但我沒有看到這個選項獲得2007年

PD:纔剛剛表可能有重複值(我猜,PK不允許複製一個重複的值,所有其他值將被複制)。如果我錯了,請糾正我。

感謝您的幫助。

+0

沒有autonumeric .. 主鍵是從ID文本字段組成(未自動編號)和日期字段。 幾乎所有表格都有來自pk的組合。 - >另一方面,我有一個表與客戶..客戶端作爲主鍵他的身份證號碼。那麼可能在數據庫a中有一個客戶端,在數據庫b中有相同的客戶端。但幾乎所有的表都不存在這個問題,並且每個數據庫中的寄存器都是不同的-----------如果在這個單獨的表中數據不被複制,那麼沒有問題。對於這個單獨的表,我可以手動複製和粘貼這些值。 – MaK 2010-04-20 03:18:13

回答

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 
+0

的作品,只是我認爲存在一種更簡單的方法,在其他數據庫,出口的所有數據庫數據的唯一或類似的東西.------ 現在我得威特我所有的問題。我再次回答你。我怎麼能在一個方法中執行所有35個查詢?不是每次只有一個查詢。非常感謝 – MaK 2010-04-20 22:27:46

+0

非常感謝,那就是我需要的。 :) 最後一個問題,有一種方法可以從C#.NET調用此vba?或者我需要我自己的方法在C#這個? – MaK 2010-04-21 16:45:58

+0

@Diego也許問一個關於如何在使用C#的Access數據庫中運行VBA過程的問題。我無法幫助你,但我懷疑其他人之前已經走上了這條路。 – HansUp 2010-04-21 17:12:11