5

Windows マシンにアクセス データベースがあり、これを Linux Web サーバーの mysql にインポートする必要があります。現時点では、アクセス データベース テーブルはテキスト ファイルとしてエクスポートされ、ftp で自動的にコピーされ、mysql にロードされます。

おそらくODBC接続などを使用して、これを行うためのより良い方法はありますか?

既に存在する情報のコピーを制限する最善の方法は何ですか。つまり、アクセス データベースにはあるが mysql データベースにはまだないレコードのみを転送します。

アクセス データベースは別のプログラムによって処理されます。アクセス データベースに変更を加えたり、開いたりする必要がなければ最高です。アクセス データベースから更新されたレコードをインポートする必要はありません。mysql データベースがメイン ソースになり、一部のレコードが削除または変更されます。意図的に削除されたレコードを復元するのではなく、mysql データベースに存在しなかったレコードのみをインポートしたい。

4

5 に答える 5

0

変更のみを転送するには、RecordChanges のような名前の新しいテーブルを Access データベースに追加することをお勧めします。

テーブル構造は次のようになります。

RecordChangeID (int) - Primary Key (Autonumber)
TableName (varchar(250)) - Name of table that changed
RecordID (int) - ID of the record in that table that was added / modified
RecordAction (char(1)) - 'A' if add, 'M' if modified or 'D' if deleted

注 - これにユーザー ID やその他の詳細を追加すると、優れた監査証跡を作成できます。

これは厄介な部分ですが、MySQL データベースと同期するテーブルでレコードが変更されるたびに、このテーブルにレコードを追加するサブルーチンをアプリケーションに作成します。

これが完了したら、次の構造を持つ、ExportStatus と呼ばれる 1 つのレコードのみを持つ別のテーブルを作成します。

LastRecordChangeID (int) - ID of the last Record Change 
                           you exported in the Record Changes table

次に、最後のエクスポート以降のすべてのレコードの変更を処理するサブルーチンを作成し (これを ExportStatus テーブルから取得します)、SQL ステートメントを生成して MySQL データベースを更新します。完了したら必ず ExportStatus テーブルを更新してください。正常にエクスポートされたすべての RecordChange レコードを削除するか、監査証跡として残すことができます。

これを実装する前に、現在行っている方法で初期同期を行う必要があります。

于 2009-01-14T13:46:52.850 に答える
0

で私の答えを見てください

DB5 から MySQL への自動アクセス

于 2009-01-14T13:50:27.477 に答える
-1

私は次のことをします:

すべての Access データを MySQL の一時テーブルにダンプします。これは、しばらくの間、データの「マスター」ソースになります。これを行うには、MySQL を指す ODBC データ ソースを設定し、Access テーブルを右クリックして [エクスポート] をクリックします。

  1. MySQL で UPDATE スクリプトを実行して、一致するレコードを更新する
  2. MySql で INSERT スクリプトを実行して新しいレコードを挿入する
  3. (オプション、これが必要かどうかによって異なります): MySql で DELETE スクリプトを実行して、新しくインポートされた Access テーブルで見つからないレコードを削除します。
  4. MySql に一時テーブルをドロップします。

リンクされたテーブルを介して、MS Access 内からこれらすべてを行うことができます。ただし、パフォーマンスはそれほど良くなく、MySql テーブルが変更された場合は Access ステートメントを変更する必要があります。

この回答はあなたにも役立つかもしれません.

于 2009-01-14T13:40:03.160 に答える