簡體   English   中英

使用 MS Access 作為 MySQL 數據庫后端的前端的問題?

[英]Issues using MS Access as a front-end to a MySQL database back-end?

兩個用戶想要共享同一個數據庫,最初是用 MS Access 編寫的,而不會因單個 MDB 文件而相互沖突。

我使用它的遷移工具包(順便說一句,它運行良好)將表從簡單的 MS Access 數據庫移動到 MySQL,並設置 Access 以通過 ODBC 鏈接到這些表。

到目前為止,我遇到了以下問題:

  • 您不能在沒有主鍵的情況下在表中插入/更新/刪除行(這並不奇怪)。
  • MS Access 中的自動編號字段必須是主鍵,否則它們最終會成為 MySQL 中的 integer 列(當然,為什么不是 PK?)
  • 表遷移到 MySQL 的 InnoDB 表類型,但訪問關系沒有成為 MySQL 外鍵約束。

一旦數據庫在使用中,我可以期待任何其他問題嗎? 特別是當兩個用戶都在同一張桌子上工作時?

我知道這個話題不是太新鮮,只是一些額外的解釋:

如果您想有效地使用 MS Access,尤其是對於更大的多用戶數據庫,請執行以下操作:

  • 將您的 MDB 拆分為前端應用程序和后端(僅限數據)文件 - 然后您將擁有兩個單獨的 MDB 文件。

  • 將所有帶有數據和結構的表遷移到外部數據庫中。 它可以是:MySQL(效果很好,沒有數據庫大小限制,需要更多技能,因為它不是 MS 技術,但在許多情況下它是一個不錯的選擇 - 此外,您可以使用更多 RAM 和額外 CPU 擴展后端,所以一切取決於您的需求和硬件能力); Oracle(如果你有足夠的錢或某種公司許可證)或 Oracle 10g XE(如果這不是問題,數據庫大小限制為 4 GB,它將始終使用 1 GB RAM 和 1 CPU), MS SQL Server 2008 (it's a great pair to have MS Access frontend and MS SQL Server backend in all the cases, but you have to pay for license: - advantages are, close integration; both technologies are form the same vendor. MS SQL Server非常容易同時保持有效)或 Express 版本(與 Oracle XE 相同的故事 - 幾乎相同的限制)。

  • 將您的 MS Access 前端與后端數據庫重新鏈接。 如果您選擇了 MS SQL 服務器作為后端,那么它就像使用 MS Access 中的向導一樣簡單。 對於 MySQL - 您必須使用 ODBC 驅動程序(它很簡單並且效果很好)。 對於 Oracle - 請不要使用 Microsoft 的 ODBC 驅動程序。 These from Oracle will do their work much better (you can compare the time needed to execute SQL query from MS Access to Oracle via Oracle ODBC and MS Oracle ODBC drivers). 此時,您將擁有可靠的數據庫后端和功能齊全的 MS Access 前端 - MDB 文件。

  • 將您的 MDB 前端編譯為 MDE - 它會給您帶來很大的速度。 此外,它是將 MS Access 應用程序分發給最終用戶的唯一合理形式。

  • 日常工作 - 使用帶有 MS Access 前端的 MDE 文件。 對於進一步的 MS Access 前端開發,請使用 MDB 文件。

  • 不要使用編寫不當的 ActiveX 組件來增強 MS Access 前端功能。 最好自己寫或購買合適的。

  • 不要相信 MS Access 存在很多問題的神話 - 這是一個很棒的產品,可以在可能的情況下提供幫助。 問題是很多人認為它是一個玩具,或者 MS Access 通常很簡單。 通常他們自己和他們缺乏知識和經驗會產生很多錯誤和問題。 要成功使用 MS Access,了解此工具非常重要 - 這是相同的規則,與其他任何技術一樣。

我可以告訴你,我正在使用非常先進的 MS Access 前端到 MySQL 后端,我非常滿意(作為維護此應用程序的開發人員)。 我的朋友們,用戶也很滿意,因為他們對 GUI(前端)、速度(MySQL)感到非常滿意,他們在記錄鎖定或數據庫性能方面沒有任何問題。

此外,閱讀大量有關良好做法和其他人經驗的內容也很重要。 我會說在很多情況下 MS Access 是一個很好的解決方案。 我知道很多專用的定制系統,它們從私有 MS Access 數據庫(MDB 文件)形式的實驗開始,然后演變為:拆分的 MS Access(MDE - 前端,MDB - 后端),最后演變為:MS Access 前端(MDE)和“嚴肅”的數據庫后端(主要是 MS SQL 服務器和 MySQL)。 同樣重要的是,您始終可以將 MS Access 解決方案用作工作原型 - 您已准備好在數據庫中使用后端(假設 MySQL),並且可以將前端重寫為您選擇的技術(Web 解決方案?也許是桌面 C#應用程序 - 你需要什么。)。

我希望我能幫助你們中的一些人考慮使用 MS Access 進行工作。

問候, Wawrzyn http://dcserwis.pl

我有一個同樣工作的應用程序:一個 MS Access 前端到一個 MySQL 后端。 這是一個巨大的痛苦,我最終寫了一個 Win32 前端。 從我的頭上,我遇到了以下問題:

  • ODBC 鏈路的開發似乎早已停止。 有各種不同的版本浮動——非常混亂。 ODBC 鏈接不支持 Unicode/UTF8,我記得它還有其他問題(盡管有些問題可以通過仔細配置來解決)。
  • 您可能想要手動調整您的數據庫架構以使其與 MS Access 兼容。 我看到您已經發現了所需的代理鍵(即 int 主鍵):-)
  • 您應該記住,您可能需要使用傳遞查詢來對 MySQL 數據庫執行更復雜的 SQL 操作。
  • 使用大量 VBA 時要小心,因為這往往會損壞您的前端文件。 定期壓縮數據庫(使用主菜單、工具 | 數據庫實用程序 | 壓縮和恢復,或類似的東西 --- 我使用的是荷蘭語版本)並進行大量備份是必要的。
  • 訪問往往會導致大量網絡流量。 就像,真的很多。 我一直無法找到解決方案。 如果您想密切關注,建議使用網絡監視器!
  • Access 堅持將布爾值存儲為 0/-1。 恕我直言,0/+1 更有意義,我相信這也是 MySQL 中的默認處理方式。 不是一個大問題,但如果你的復選框不起作用,你一定要檢查這個。

一種可能的替代方法是將后端(帶有數據)放在共享驅動器上。 我記得這是有據可查的,也在幫助中。 您可能想查看一些關於拆分為前端和后端以及在啟動時自動重新連接到后端的代碼的一般建議; 我還可以向您發送更多示例代碼,或在此處發布。

否則,您可能還需要考慮 MS SQL。 我沒有這方面的經驗,但我認為它與 MS Access 一起工作得更好!

加雷斯·辛普森認為:

如果只有兩個用戶,那么如果您將 .mdb 放在共享驅動器上,Access 應該就可以了。

呃沒有。 沒有多用戶訪問應用程序,每個用戶都不應該擁有一個專用的前端副本。 這意味着每個用戶的工作站上都應該有一個 MDB。 為什么? 因為前端的對象不能很好地共享(不如 Jet 數據表,盡管在這個場景中沒有任何一個使用 MySQL 作為后端)。

加雷斯·辛普森繼續說道:

我相信 Access 的推薦最大並發用戶數是 5,但有時我已經將它推到了這一點,並且永遠不會被卡住。

不,這是完全不正確的。 MDB 用戶的理論限制是 255 個。當然,這不現實,因為一旦達到大約 20 個用戶,您必須仔細編程您的 Access 應用程序才能正常工作(盡管您需要在 Access-to- Jet 應用程序與您為提高任何服務器數據庫應用程序的效率所做的事情相同,例如,檢索最小的可用數據集)。

在這種情況下,由於每個用戶都應該擁有前端 MDB 的單獨副本,因此 Access/Jet 的多用戶限制根本不相關。

我知道這不能直接回答您的問題,但可能值得查看用於 Access 的 SQL Server 2005 遷移工具 我從未使用過該工具,但它可能值得與 SQL Server 2005 Express Edition 一起使用,看看是否存在與 MySQL 相同的問題

不要忘記在每條記錄上放置一些類型的時間/日期戳。 有時 ms access 會認為“另一個用戶已更改或刪除了記錄”並且不允許您進行更改。 我發現這很困難。

一般來說,這取決於:)

當應用程序端剛剛通過 forms 更新數據時,我沒有遇到很多問題。 當多個用戶更新同一行時,您可能會收到警告/錯誤; 但 Access 似乎一直在不斷更新其實時記錄集。

如果 Alice 已經在使用記錄 365,並且 Bob 更新它,然后 Alice 嘗試使用她的更改來更新它,則可能會出現問題。 我記得,Alice 會收到一條神秘的錯誤消息。 如果您捕獲這些錯誤並至少給他們一個更友好的錯誤消息,那么用戶會更容易。

當我通過 RecordSets 編輯 VB 代碼中的記錄時,我遇到了更多問題,尤其是在結合編輯 forms 上的相同數據時。 這不一定是多用戶問題。 但是,您的情況幾乎相同,因為您有一個用戶與同一數據有多個連接。

如果只有兩個用戶,那么如果您將 .mdb 放在共享驅動器上,Access 應該就可以了。

你有沒有先嘗試過,而不是僅僅假設它會是一個問題。

我相信 Access 的推薦最大並發用戶數是 5,但有時我已經將它推到了這一點,並且永遠不會被卡住。

另一方面,我曾經在單用戶環境(我)中使用 Access 作為 MySQL 的前端。 這是一次非常不愉快的體驗,我無法想象有兩個用戶會變得更好。

暫無
暫無

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

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