簡體   English   中英

在MS Access和MySQL之間同步數據的最佳方法是什么?

[英]What is the best way to synchronize data between MS Access and MySQL?

我在Windows機器上有一個訪問數據庫,我必須在linux webserver上導入mysql。 此時訪問dabatbase表導出為文本文件,自動用ftp復制,然后加載到mysql中。

有沒有更好的方法來執行此操作,可能使用ODBC連接或其他?

限制已經存在的復制信息的最佳方法是什么,即僅傳輸訪問數據庫中但尚未存在於mysql中的記錄。

訪問數據庫由另一個程序處理,如果我不必對其進行更改,甚至打開它,那將是最好的。 無法從訪問數據庫導入更新的記錄。 mysql數據庫將成為主要來源,一些記錄將被刪除或更改。 我只想導入從未在mysql數據庫中的記錄,而不是還原那些有意刪除的記錄。

為什么不按照Keltia的建議通過ODBC鏈接表,然后使用一系列查詢來添加缺失的記錄並更新已更改的記錄。 查詢可以通過VBA運行。 ADO也適用於MySQL和Access。

關於Access中使用的代碼的一些注釋:

   Set db = CurrentDb
   strSQL = "Insert INTO [ODBC;DSN=DSNName;].NameOfMySQLTable " _
   & "Select AnyField As NameOfMySQLField FROM AnyAccessTable;"

   db.Execute strSQL, dbFailOnError
   End Sub

- http://forum.lessthandot.com/viewtopic.php?f=95&t=3862

如果您確實需要增量更新,那么執行此操作的方法是編寫一個連接到兩個數據庫的腳本(至少在Access端通過ODBC)並比較所有表。 復制整個東西的好處是你肯定不會忘記任何東西,缺點可能是大小以及mysql在重新加載期間不可用的事實。

為了幫助僅傳輸更改,我建議您在Access數據庫中添加一個名為RecordChanges的新表。

表結構如下:

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,具有以下結構:

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

然后創建一個子例程來完成自上次導出以來的所有記錄更改(從ExportStatus表中檢索)並生成SQL語句以更新MySQL數據庫,確保在完成后更新ExportStatus表。 您可以刪除已成功導出的所有RecordChange記錄,或將其保留為審計跟蹤。

在實現之前,您需要按照當前的方式進行初始同步。

看我的回答

自動訪問DB5到MySQL

我會做以下事情:

將所有Access數據轉儲到MySQL中的臨時表中,這將暫時成為您的“主”數據源。 您應該能夠通過設置指向MySQL的ODBC數據源,右鍵單擊Access表,然后點擊“導出”來完成此操作。

  1. 在MySql中運行UPDATE腳本以更新匹配記錄
  2. 在MySql中運行INSERT腳本以插入新記錄
  3. (可選,取決於這是否是您想要的):在MySql中運行DELETE腳本以刪除在新導入的Access表中找不到的記錄。
  4. 刪除MySql中的臨時表。

可以通過鏈接表從MS Access內部完成所有這些操作。 但性能不會那么好,並且當/如果你的MySql表發生變化,它將需要更改Access語句。

這個答案也可能對你有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM