web-dev-qa-db-ja.com

複数のアクセスデータベースを一緒に同期するにはどうすればよいですか?

私は調査を行っており、Accessを使用してデータを収集します。同じ構造化アクセスDBを使用してこれらの調査を実施する人が複数いるため、他のすべてのデータベースから収集した情報を使用して中央データベースに更新/同期する方法を検討する必要があります。つまり、複数の人が収集するデータを1つの中央エリアに収集する必要があります。どうすればよいですか?

本質的に、これはまさに私がやりたいことですが、方法がわかりません。

間接同期

間接同期は、ラップトップを持って旅行しているときなど、切断された環境で作業する場合に役立ちます。

間接同期は、ReplicationManagerを使用してのみ構成できます。 Replication Managerを使用して間接同期を構成すると、Microsoft Access、Replication Manager、またはJROを使用して間接同期を実行できます。

サイト

5
James Mertz

これを行うために私が知っている最も信頼できる方法は、ファイルサーバーからデータベースを操作するプログラムを作成することです。 MS Accessを使用したいクライアントのためにこれを行うには、プログラムを(最初から)作成する必要がありました。残念ながら、ここで説明するのは難しいです。複数の場所からAccessデータベースファイルにアクセスできる場合、MS Accessソフトウェアは変更を加えることができるはずですが、それらの変更が他のシステムに伝播するかどうか、またはそれがどれほど信頼できるかはわかりません。

1
TuxRug

この記事を参照してください: 複数のMS Accessデータベースを1つにマージ

複数の一般的に構造化されたデータベースを単一のデータベースに統合するために、MS Access VBAで記述されたMerge()関数を以下に示します。多くの島のデータベースを統合する必要があるプロジェクトの1つで、この関数を作成する必要がありました。データベースの構造はまったく同じでした。

データが重複するレコードを作成するため、データを挿入できない場合は警告が表示されます。このような状況では、警告メッセージを無視して続行してください。

スクリプト自体は、次のようなコマンドの実行でループします。

INSERT INTO target SELECT * FROM source

元のWebサーバーが壊れているように見えるため、スクリプト全体が Wayback Machine から取得され、ここに再現されます。

Option Compare Database
Option Explicit

'Set the below variable to TRUE
'When you are done with testing
'Basically testing mode will print
'the names of all the databases
'you are going to merge
Const bTest = False

Sub Merge()

    'Copyright © iLoveCoding, 2010
    'Web: http://www.iLoveCoding.co.uk

    'The Merege() is a function that merges
    'records from multiple MS Access databases
    'into a consolidated one provided that the
    'structure of all databases are exactly same.
    '
    'This function assumes that there are
    'no relationships defined among the tables.
    'Which is typically the scenario when an
    'MS Access database is used in an Intranet or
    'Web application.

    'However properly altering the order of the
    'dbfiles() initialization one can easily
    'address the issue of relationships and
    'data integrity among tables

    On Error GoTo errhand
    Dim appPath$
    '----------------------------------------------
    'Change the below number to number of databases
    'you are going to merge
    '----------------------------------------------
    Const ndb = 22
    Dim dbfiles$(2 To ndb)
    Dim i%
    'ANA.mdb
    '----------------------------------------------
    'Array of the database file names without path
    'Copy this code into a module of the first database
    'The first database is going to be the consolidated
    'capturing the records from all other databases.
    'The first database name is not present here
    'That is why the index starts with 2.
    '----------------------------------------------
    dbfiles(2) = "second.mdb" '<= change the file name
    dbfiles(3) = "third.mdb"
    dbfiles(4) = "fourth.mdb"
    '
    'similarly initialize other files
    '
    dbfiles(10) = "tenth.mdb"
    '----------------------------------------------
    ' The databases should be copied to the same
    ' folder of the first database
    '----------------------------------------------
    appPath = CurrentProject.Path
    For i = 2 To ndb
        Dim dbpath$, db As Database
        dbpath = appPath & "\" & dbfiles(i)
        Set db = OpenDatabase(dbpath)
        Dim tbl As TableDef, j%
        For j = 0 To db.TableDefs.Count - 1
            DoEvents
            Set tbl = db.TableDefs(j)
            If tbl.Attributes = 0 Then
                If bTest Then
                    Debug.Print tbl.Name
                Else
                    DoCmd.TransferDatabase acLink, "Microsoft Access", _
                    dbpath, acTable, tbl.Name, tbl.Name & "_Linked", False
                    Dim sql$
                    sql = "INSERT INTO [" & tbl.Name & "] SELECT * FROM [" & _
                    tbl.Name & "_Linked" & "]"
                    DoCmd.RunSQL sql
                    DoCmd.DeleteObject acTable, tbl.Name & "_Linked"
                End If
            End If
        Next j
        Debug.Print dbfiles(i)
    Next i
    Exit Sub
errhand:
    MsgBox Err.Description
End Sub
1
harrymc

データ入力に使用しているUIの種類はわかりませんが、アクセスを使用せず、代わりにSQL Expressを使用し、おそらく.Netアプリケーションとしてデータ入力を行うことをお勧めします。

次に、SQL Serverを実行し、個々のExpressデータベースをマスターにマージして戻すことができます。見てください http://msdn.Microsoft.com/en-us/library/ms152746.aspx

収集しているデータの詳細はありませんが、重複はないようです。つまり、各コレクターには一意のデータセットがあり、マージの競合の可能性はありません。したがって、かなり簡単に実行できるはずです。

0
chris

何か 同様の がStackOverflowで議論されました、多分それはあなたに続行する方法についてのいくつかの指針を与えることができます。

予算を超える可能性のある別のオプションは、 Altova DatabaseSpy である可能性があり、CSV/XMLデータをAccessデータベースにインポートできます。

0
Sharken