1

Access データベースの経験はほとんどありませんが、同様の VBA マクロを Excel で作成しました。ある .mdb ファイルから別の .mdb ファイルのまったく同じテーブルに行をコピーしようとしています。ただし、まだ存在しない場合にのみインポートしたいと思います。誰かがこれを行うための最良の方法と、私が使用および変更できるコードを教えてもらえますか? 私はすでにスタックオーバーフローを調べましたが、うまくいく例が見つからないようです。

8 つの異なるテーブルがあり、これらの中に数百行あります。おそらく5〜20列です。

スクリプトを VBS 内で作成できれば、アクセスに読み込まずに更新を実行できるため、これは理想的です。

助けやアドバイスをありがとう、サイモン

編集 -

Zevの答えは仕事をしているようですが、このエラーが発生しています。また、site2内のMDBは、コピーしてsite1に入れているものです

Error: Expected end of statement
Code: 800A0401
Line: 17
Char: 13

コード (「update.vbs」として保存):

Dim eng
Set eng = CreateObject("DAO.DBEngine.120")
Set dest = eng.OpenDatabase("C:\Users\simon\Documents\garden games redesign\import script\Site1\ActinicCatalog.mdb")

Sub CopyTable()
    Dim rs
    Set rs = dest.OpenRecordset("Person")

    Dim sWhere
    For Each fld In rs.Fields
        sWhere = sWhere & " AND " & fld.Name & " <> t1." & fld.Name
    Next
    sWhere = Mid(sWhere, 6)

    Dim sql: sql= _
        "INSERT INTO Person " & _
        "SELECT * " & _
        "FROM Person AS t1 IN ""C:\Users\simon\Documents\garden games redesign\import script\Site2\ActinicCatalog.mdb"" " & _
        "WHERE " & sWhere
    dest.Execute(sql)
End Sub

詳細については編集してください:

\Site1\ActinicCatalog.mdb - 宛先データベースです \Site2\ActinicCatalog.mdb - 元のデータベースです

これらのデータベースには約 20 の列があります

4

2 に答える 2

3

開始するための例を次に示します。現在のデータベースの [Table1] の内容を 2 番目のデータベースの [Table1] にコピーします。

Option Compare Database
Option Explicit

Sub copyTables()

    'Open source database
    Dim dSource As Database
    Set dSource = CurrentDb

    'Open dest database
    Dim dDest As Database
    Set dDest = DAO.OpenDatabase("C:\Users\Admin\Desktop\DBdest.accdb")

    'Open source recordset
    Dim rSource As Recordset
    Set rSource = dSource.OpenRecordset("Table1", dbOpenForwardOnly)

    'Open dest recordset
    Dim rDest As Recordset
    Set rDest = dDest.OpenRecordset("Table1", dbOpenDynaset)

    'Loop through source recordset
    While Not rSource.EOF

        'Look for record in dest recordset
        rDest.FindFirst _
            "Field1 = '" & rSource.Fields("Field1") & "' AND " & _
            "Field2 = " & rSource.Fields("Field2")

        'If not found, copy record - Field1 is text / Field2 is numeric
        If rDest.NoMatch Then
            rDest.AddNew
            rDest.Fields("Field1") = rSource.Fields("Field1")
            rDest.Fields("Field2") = rSource.Fields("Field2")
            rDest.Update
        End If

        'Next source record
        rSource.MoveNext
    Wend

    'Close dest recordset
    rDest.Close
    Set rDest = Nothing

    'Close source recordset
    rSource.Close
    Set rSource = Nothing

    'Close dest database
    dDest.Close
    Set dDest = Nothing

    'Close source database
    dSource.Close
    Set dSource = Nothing
End Sub
于 2013-07-16T09:16:30.297 に答える