2010-06-20 155 views
4

我有一個使用Access的內部系統非常大的客戶端,它在內部用於處理幾乎所有的公司數據。他們需要一個Web前端來訪問該數據庫中的客戶數據,並且將運行在不同的服務器上。鑑於Access的限制,前端可能會使用MySQL。同步訪問數據庫和MySQL

這留下了同步數據的問題。它不需要一秒鐘,即使每天都會很好,但我真的不確定是否有這樣做的好方法。

考慮到現有系統的範圍,將整個系統移動到另一個數據庫(如MySQL)將花費大量時間和工作量。

有沒有實際的方法來實現這個目標?

+1

什麼類型的應用程序圍繞訪問數據庫構建?他們都是訪問表單嗎?如果他們可以將數據模型和數據移動到mysql中,然後將mysql中的錶鏈接到訪問數據庫中,並且仍然可以使用這些表單而不用其他技術重寫它們。 – Doug 2010-06-20 19:19:12

+0

我同意道格 - 應該只有一個數據庫。他們可以使用Access作爲前端來訪問MySQL,對於那些悲傷的人來說...... – 2010-06-20 19:24:18

+0

啊,當你說「前端可能會使用MySQL」時,你的意思是你會使用Access後端替換數據存儲到MySQL。不是說你會用MySQL替換Access前端,這是沒有意義的。嗯,但這不是你在第三段中的意思。 – 2010-06-20 20:17:15

回答

1

我會讓一位有經驗的Access開發人員升級Access應用程序,以使用SQL Server Express代替MySQL的數據。我會選擇MySQL上的SQL Server Express,它很可能會更好地與Access一起工作,您可能會發現MS Access和SQL Server的聯機支持比MS Access和MySQL更爲失敗。

這項工作可能需要幾個星期或更多的經驗豐富的人。當然,這個系統越長,需要的時間越長。

一個因素是,如果客戶希望數據從網站下載到數據庫或者只是將數據發佈到網絡上?如果只是發佈到網絡上,那麼使用查詢更新Web數據庫的建議可能會奏效。如果採用這兩種方式,那麼事情開始變得棘手,並且升級到SQL Server將來會是更好的選擇。

+0

對不起,我應該提到它,但它讓我心生不安。數據只需要具有讀取權限。所以數據唯一的變化來自於內部訪問方面。 – 2010-06-20 23:03:44

+0

這是現在。因此編碼一些查詢來複制數據將工作。但是,長期的答案是將數據升遷到SQL Server Express。遲早他們會希望人們能夠通過網絡輸入/更新數據。 – 2010-06-21 01:34:25

2

從Access中可以相當容易地複製內容,例如使用運行SQL查詢的按鈕,該查詢將數據複製到Internet上的MS-SQL數據庫。

我不會去找MySQL,如果你不必這樣介紹字符編碼問題,複製到MS-SQL更明智。

當然要保持警惕,你將有3個系統:1個訪問系統,1個網絡系統和1個用於複製數據的系統。這種情況是,並引入更高的維護成本。

+0

+1因爲非常謹慎。 – molf 2010-06-21 17:12:54

1

如果Web數據庫可以在Access用戶所在的本地局域網上訪問,那麼將後端升遷到服務器數據庫並擁有單個數據庫會更有意義。但事實並非如此,因爲Web服務器可能不是本地的(這通常是件好事)。

如果我理解你的意見,這是一個明確的主/從關係,Access數據庫是主數據庫,而網站數據庫是從屬數據庫。在這種情況下,您應該能夠定期更換網站數據庫。有幾個方法可以做到這一點:

  1. ,如果你可以訪問整個互聯網MySQL的端口,可以使用ODBC只需將表導出到MySQL,通過ODBC。我不確定在導出之前是否必須在MySQL中刪除每個表,但只要嘗試運行導出就會發現。

  2. ,如果你不能到遠程數據庫的直接連接,那麼一種選擇是運行本地MySQL實例,出口,然後轉儲數據庫的SQL腳本,上傳到網站並運行它來替換現有的數據庫。我已經做到了這一點,並沒有聽起來那麼困難。如果它不需要自動化,那麼最好在兩端安裝phpMyAdmin並使用它。如果需要自動化,這是一個不同的問題,我不知道MySQL命令,但我確定找到這些命令並不難。

3

我的步驟,以 「同步」 更像是超快的備份

在Windows 1.-轉換數據庫與此

http://www.bullzip.com/products/a2m/info.php 

其轉換速度快大多數數據庫到YOURDATABASE.sql

2.-在Linux(我使用Ubuntu)

因爲你必須經常這樣做我推薦結束更正腳本。我的

例如:

#!/bin/bash 
#edita tablas 
szAnswer=$(zenity --title="YOURDATABASE" --entry --text "some text" --entry-text ""); 
fromdos $szAnswer; 
sed -i 's/DATETIME\ DEFAULT\ .*/DATE,/g' $szAnswer; 
sed -i 's/DATETIME/DATE/g' $szAnswer; 
sed -i 's/FLOAT/DECIMAL(10,2)/g' $szAnswer; 
sed -i 's/(NULL,/(\ ,/g' $szAnswer; 
sed -i 's/ NULL);/\);/g' $szAnswer; 
sed -i 's/,\ NULL,/,\ ,/g' $szAnswer 

zenity程序默認是在Ubuntu 你需要 「fromdos」 在Windows回車

則: 3.-的mysql -u theuser -pthepass

mysql>來源YOURDATABASE.sql

並且您在約5分鐘內完成。