質問

現在、複数の (同じスキーマの) アクセス 2003 データベースがラップトップで使用されているという問題があります。

データを中央アクセス データベースに同期する自動化された方法を見つける必要があります。

ラップトップ上のデータは追加されるだけなので、更新/削除操作は問題になりません。

どのツールを使えばこれを簡単に行うことができますか?最適なツールまたはソリューションの決定に影響を与える要因は何ですか?

役に立ちましたか?

解決

Accessに組み込まれているJetレプリケーションを使用することは可能ですが、警告しますが、非常に不安定です。また、キーの衝突を避けるためにランダムな符号付き整数を選択するため、どのテーブルでもPKを台無しにします。そのため、特定のレコードの次のPKとして-1243482392912が発生する可能性があります。これは、何らかの種類のルックアップ(顧客ID、注文番号など)を行う場合に入力するPITAです。Accessの同期を自動化することはできません(VBAを使用してそのようなものを偽造することもできますが、 、データベースが開かれたときにのみ実行されます)。

「中央」でSQL Server 2005/2008を使用することをお勧めします。データベースとSQL Server Express Editionsを「リモート」のバックエンドとして使用します。次に、Accessのリンクテーブルを使用してこれらのSSEEデータベースに接続し、レプリケーションしてそれらを同期します。 マージレプリケーションまたはスナップショットレプリケーションと「中央」パブリッシャーとしてのデータベースとサブスクライバーとしてのSSEEデータベース。 Access Jetのレプリケーションとは異なり、PKの番号付けを制御できますが、ユーザーにとっては、サブスクライバーが変更をプッシュしないため、これは問題になりません。

SQLサーバーがもたらすスケーラビリティに加えて、Windows同期マネージャーを使用してこれを自動化することもできます(同期フォルダーがある場合は、ログオン/ログオフ時にポップアップして同期する迷惑な小さなボックスです)。特定の間隔、起動時、シャットダウン時、時刻、および/またはコンピュータがアイドル状態のときに同期するように、またはオンデマンドでのみ同期するように設定します。 Accessが1か月間実行されていなくても、ユーザーがネットワークに接続するたびにデータセットを更新できます。非常にクールなもの。

他のヒント

アクセスレプリケーションは厄介な場合があり、一部のチェックを伴う追加クエリのみを必要とするため、おそらく自分で何かを書くのが最善でしょう。各ラップトップによって収集されたデータが重複できない場合、これはそれほど難しくないかもしれません。

主キーを考慮する必要があります。レコードが正しく関連していることを確認するために、キーにユーザーまたはラップトップの名前を組み込むことが最善かもしれません。

このスレッドの回答には、明らかにそれを使用したことがなく、聞いたことを繰り返している、または実際にアプリケーション設計エラーを反映している問題をJet Replicationに帰している人々からのJet Replicationに関する誤った情報が満載されています。

  

Jetを使用することは可能です   Accessに組み込まれたレプリケーションが、私は   警告が表示されますが、非常に不安定です。

ジェットレプリケーションは不安定ではありません。他の複雑なツールと同様に、適切に使用すれば完全に信頼できます。レプリケートされていないデータベースで問題を引き起こさない特定のものがレプリケートされたときに問題を引き起こす可能性があることは事実ですが、それは any データベースエンジンによるレプリケーションの性質のために理にかなっています。

  

また、あなたのPKを台無しにします   あなたがそれをするどんなテーブルでも   ランダムな符号付き整数を選択して試行します   キーの衝突を避けるため、   あなたとして-1243482392912で終わる   特定のレコードの次のPK。それは   PITAを実行している場合は入力する   一種の検索(顧客のような)   ID、注文番号など)

サロゲートオートナンバーPKは、そもそもユーザーに公開されるべきではありません。これらは、舞台裏でレコードを結合するために使用される無意味な数字であり、ユーザーに公開する場合、アプリケーションの設計に誤りがあります。

シーケンス番号が必要な場合は、独自の番号を振って、レプリカ間の衝突を防ぐ方法の問題に対処する必要があります。しかし、これは any データベースエンジンでのレプリケーションの問題です。 SQL Serverは、データベースエンジンレベルで個々のレプリカにシーケンス番号のブロックを割り当てる機能を提供しますが、これは非常に便利な機能ですが、複数のSQL Serverインスタンスを維持することにより管理上のオーバーヘッドが増加します(すべてのセキュリティおよびパフォーマンスの問題それが伴います)。 Jet Replicationでは、これをコードで行う必要がありますが、それはほとんど複雑な問題ではありません。

もう1つの方法は、1つの列がソースレプリカを示す複合PKを使用することです。

ただし、これはJetのレプリケーション実装の問題ではありません。意味のあるシーケンス番号が必要なレプリケーションシナリオの問題です。

  

アクセスを自動化することはできません   同期(たぶんあなたは偽造できる   VBAを使用してそのようなもの。しかし   それでも、それはときにのみ実行されます   データベースが開かれます)。

これは明らかに真実ではありません。 Jetシンクロナイザーをインストールすると、同期(直接、間接、またはインターネット同期)をスケジュールできます。それがなくても、VBScriptを定期的に実行して同期を実行するようにスケジュールできます。これらは、Accessアプリケーションを開かずに自動化されたJet同期を実現する2つの方法です。

MSドキュメントからの引用:

  

Jetおよびレプリケーションオブジェクトを使用

JROは、Jetレプリケーションを管理する最良の方法ではありません。 1つは、DAO自体に欠けている機能が1つしかないことです。つまり、コード内で間接同期を開始する機能です。ただし、アプリに依存関係を追加する場合(JROには参照が必要であるか、遅延バインディングを介して使用できます)、Jetレプリケーションを制御するための本当に便利なライブラリに依存関係を追加することもできます。 href = "http://trigeminal.com/lang/1033/utility.asp?ItemID=9#9" rel = "nofollow noreferrer"> TSIシンクロナイザー、かつては世界の第一人者であったマイケル・カプランが作成Jet Replication(その後、彼の集中分野として国際化に移行しました)。同期のスケジューリング、あらゆる種類の同期の開始、非常に必要なMoveReplicaコマンド(レプリケーションを中断せずにレプリカを移動または名前変更する唯一の正当な方法)など、Jetが公開するほぼすべてのレプリケーション機能を完全にプログラムで制御できます。

読み込んでみるといいでしょう アクセス データベース レプリケーション, いくつかの情報があるので。

ただし、アプリケーションで正しく動作させるには、 利用可能なメソッドとプロパティ その目的のために。

Microsoft Access データベース (.mdb ファイルのみ) のレプリカ セットのメンバー間でのデータおよび設計情報の交換をプログラムで制御する必要がある場合は、Jet およびレプリケーション オブジェクト (JRO) を使用します。たとえば、JRO を使用して、ユーザーがデータベースを開いたときにユーザーのレプリカをセットの残りの部分と自動的に同期するプロシージャを作成できます。データベースをプログラムで複製するには、データベースを閉じる必要があります。

データベースが Microsoft Access 97 以前で作成されている場合は、データ アクセス オブジェクト (DAO) を使用してプログラムでデータベースを複製し、同期する必要があります。

DAO のメソッドとプロパティを使用して、以前のバージョンの Microsoft Access でレプリケートされたデータベースを作成および維持できます。レプリカ セットのメンバー間でのデータおよび設計情報の交換をプログラムで制御する必要がある場合は、DAO を使用します。たとえば、DAO を使用して、ユーザーがデータベースを開いたときにユーザーのレプリカをセットの残りの部分と自動的に同期するプロシージャを作成できます。

次のメソッドとプロパティを使用して、レプリケートされたデータベースを作成および維持できます。

  • MakeReplica 方法
  • Synchronize 方法
  • ConflictTable 財産
  • DesignMasterID 財産
  • KeepLocal 財産
  • Replicable 財産
  • ReplicaID 財産
  • ReplicationConflictFunction 財産

Microsoft Jet には、部分レプリカ (完全レプリカ内のレコードのサブセットを含むレプリカ) を作成および維持するための次の追加メソッドとプロパティが用意されています。

  • ReplicaFilter 財産
  • PartialReplica 財産
  • PopulatePartial 方法

絶対読んだほうがいいよ データの同期 ドキュメントの一部。

a07へのアップグレードを強制されるまで(廃止されたとき)、a00でレプリケーションを何年も使用しました。企業レベルで遭遇した最も問題のある問題は、 CONFLICTS の管理でした。タイムリーに管理されていない場合、または多すぎる場合、ユーザーはイライラし、データの信頼性が低くなります。

リモートサイトが常にインターネットに接続されているわけではない場合、レプリケーションはうまくいきました。これにより、データを操作し、可能なときに同期することができました。少なくとも1日2回。

同期を管理するリモートコンピューターに個別のデータベースをインストールするため、ユーザーはデスクトップ上のアイコンをクリックするだけで同期を呼び出すことができます。

ユーザーには、レガシーシステムから更新される指定のFTPファイルからフィードをプッシュ/プルするための個別のボタンがありました。

この「ノード」が30個あるため、このプロセスは非常にうまく機能しました。全国で働き、データを管理し、FTPサーバーに更新します。

このパスを真剣に検討している場合はお知らせください。ドキュメントをお送りします。

ラップトップに接続してデータベースから差分を選択し、それをマスターに挿入する同期ソフトウェアを独自に作成できます。 この操作がどれほど簡単になるかは、データスキームによって異なります。 (FKを含むテーブルが多数ある場合は、スマートに行う必要があります)。 自分で書くと最も効率的だと思います。

この種の動作の自動化はレプリケーションと呼ばれ、サポートどうやら、それは実装されていません。

ほとんどの場合、ラップトップがメインDBに接続されていないので、とにかく(データを複製するために)良いアイデアではありません。

実行するサードパーティ製のツールを探す場合-コピーする前にテーブル間の差分を簡単に実行でき、もちろん段階的に実行できるものを探します。

FWIW:

  1. オートナンバー。私はデイビッドに同意します-彼らは決して暴露されるべきではありません。その誘惑を取り除くには、ランダムな自動番号を使用します。
  2. レプリケーション。私はこれを数年前に広範囲に使用し、同期をスケジュールし、GUIDをPKとして使用しました。ネットワーク上の一時停止がレプリカを破損し、その結果、データを回収し、レプリカを再発行しなければならなかったことが繰り返し判明しました。痛みを伴う!
scroll top