Delphi + MySQL 的問題探討 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
前言筆者用 Delphi 己經很久了,但由於不是全職 Programmer ,所以功力仍然很淺,慚愧。是次因為花了很多時間在 Delphi 與 MySQL 的應用上而發現很多難題,既看見不少同病相連的同道,便整理了一下所得的資料,給其他有需要的人作為參考之用。若這些資料有甚麼錯漏的地方敬請指正。 本文會以探討以 dbExpress 連結 MySQL 為主,但文未亦會提及另類的連結方法。 dbExpree 是 Borland 公司力薦的新一代跨數據庫跨平台的數據庫驅動程式架構,亦受到國內名 Delphi 作家李維先先的推薦。在設計上,該驅動程式架構的確是相當優異的。 MySQL 是最流行的發放源程式數據庫軟件,雖然它還欠缺很多大型商用數據庫的功能 (如 Stored Procedure, Trigger 等),但由於它的開發商非當著重它的速度和穩定性,所以普遍流行於網上使用,亦在商用市場中功能要求較低但要求高速高穩定的範疇內佔越來越重要的地位。由於缺少的功能都在陸續加入中,若開發商能保持既有的速度和穩定優勢,有可能更進一步佔有更多的市場比率。 從Delphi 6推出的第一個版本的dbexpress驅動程式架構未支援 MS SQL Server 己支援 MySQL 來看,這個Delphi 加 MySQL 的組合,是很有希望成為一個很好的組合的,可惜的是,在實作上,Borland 公司太過於建基於 interbase (Borland 自家產品) 作編程的藍圖,即使在開發別家數據庫的個別驅動程式時,亦常先入為主地以interbase 的方法來運作,至使產生很多不符合效率,甚至不能運作的情況。這個情況在 MySQL 的驅動程式尤其嚴重。面對這些問題,Borland 及其資助的 Team B 成員經常的第一反應是──這是MySQL本身的限制,所以不能符合這些那些功能,或導致這些那些臭蟲。但實際情況是,MySQL只是以不同(更快速直接但較少變化)的方式去達到同一目的,只是 Borland 不想花時間去適應個別數據庫的運作方法,而省時地使用了Interbase的運作模式罷了。最近 Core Lab 推出的 MySQL 驅動程式,就完全解決了近來所知的 Borland MySQL 驅動程式的絕大部份問題,還了MySQL一個清白。(注意,這不是推薦該驅動程式,因它可能也有它的問題) 最可恨的是,Borland公司自推出該驅動程式以來既不用心的修正錯誤,也不開放源程式碼讓使用者自行修正,至使無數的使用者在遇到太多不能解決的問題後均放棄了Delphi MySQL這個組合,而2年後的今天,新使用者還是滿懷希望而來,遇到眾多不能解決的問題而浪費不少時間,最後大多失望而回。 近一個月來,在 Borland 新聞群組裡對此的投訴與要求聲音大增(筆者也是其中一個攪事份子,呵呵),亦引起不少的迴響,但未知能否加快Borland解決此問題的步伐。版本
Borland Quality Central (品質中心)由於下面會多次提到品質中文的文件,所以先介紹這個供使用者提議和報告臭蟲的地方。 品質中心是半官方的機制,不是由 Borland 員工直接主持而是與 Borland 有密切關係的自願人仕主持(筆:賣這麼貴連這個錢也省,唉)。在那裡發表的要求與報告,不會直接進到 Borland 的內部資料庫,而是經那些自願的系統操作員看過,測試過認為有需要才將報告傳送到 Borland 的內部資料庫處理。雖然這樣做比較轉折,但總比以前沒有機制將聲音傳到 Borland 內部好。 由於報告眾多,那些報告比較重要,那些報告較多人關註,而需要先處理的呢?品質中心提供2個機制去給系統管理員們參考。 第一個是投票,每個使用者只限5票,你可投在你認為最重要的一或數個報告中,多票數的自然比較優先的了。 第二個是評分,每個使用者都可為每份報告評分,優質的報告也偏向於得到較快的處理。 多一些使用者參與其中,不但能使資源用在更多人關註的地方,更給 Borland 更大的壓力說明我們使用者是注重我們的權利的。參與品質中心所有註冊使用者均可參與品質中心,即是不是註冊使用者好像也可以使用(這個我不大肯定,因我使用時己註冊了)。方法如下 :
DBExpress 官方 Driver 的問題MySQL 4 獨有的問題若你使用的是 MySQL 4.0.x 的版本,你會發現你根本連不上 MySQL Server。原因是你的 dbExpress 驅動程式與你的 LibMySQL.dll 版本不苻。 上文已有提及,Delphi 6/7 提供的驅動程式是針對於 MySQL 3.X 的,所以與 MySQL 4.0.x 不相符。Borland 在 2002年三月時登出了 MySQL 4.0.1 的驅動程式測試版。該驅動程式並沒加上4.0.x的新增功能,只是調整介面以配合4.0.1版的 Libmysql.dll。更可惜的是,該驅動程式測試版充滿臭蟲而且在較新版的 Libmysql.dll 中再次失效。 [dbexpmy4.dll 下載 : http://bdn.borland.com/article/0,1410,28590,00.html] 早前在網上有一個暫時解決方案,就是不用最新的 libmysql.dll,而繼續使用 4.0.1 的 libmysql.dll 來配合較新版的 MySQL Server。這方案在 4.0.9及以前的版本時確是可行的,但是在 MySQL Server 4.0.10之後的版本亦告失敗了。由於這個driver沒新增工能且臭蟲多多,即使你是使用4.0.9之前的版本,亦不建議使用這個驅動程式。 若你不想使用別家的驅動程式,現在唯一的暫時解決方案是使用 dbexpmysql.dll 配 3.23.55 (或稍早版本) 的 libmysql.dll。當然,有些MySQL4的新增工能會因此而運用不到,但大多3.23.x版本的功能還是可如常操作的,總比不能連上主機好多了。 另外的解決辦法是使用第三者提供的驅動程式,本文稍後將會稍作介紹 Core Lab 的收費驅動程式,和免費的 Open ODBC 驅動程式。最後,使用者也可選擇跳過 dbExpress 而用其他另類的連接方法,亦將於稍後討論。 你的幫助: 你可到品質中心投票評分,以加強要求更新驅動程式的聲音。 http://qc.borland.com/wc/wc.exe/details?reportid=3731 http://qc.borland.com/wc/wc.exe/details?reportid=3732所有版本共同問題以下問題大部份是 MySQL 驅動程式獨有的問題,但有些也是一般 dbExpress 會遇到的問題。由於問題的詳情和複制該問題的步驟均已在QC裡有詳細說明,所以我只會簡介並列出相關的QC連結。若你對某問題看不明白或不能申請QC戶口可提出,我會試試抽時間解釋詳細一些。若你發理更多的難題或你有解決方案而不想自行打在QC中,可post在這裡,我也會抽時間打進 QC 裡。
第三者dbExpress驅動程式簡介Open ODBC for dbexpresshttp://sourceforge.net/projects/open-dbexpress 這是一個免費的 dbExpress ODBC Driver,基本上支援所有ODBC能連接的數據庫。 好處:
Core Lib MySQL Driverhttp://crlab.com/dbx/ 這是一個要付費的 MySQL dbExpress Driver,支授 3.23.x 及 4.0.x 版本的 MySQL 。 好處:
非 dbExpress 的連結這些連結方法通常適用於 D3 - D7,但即使 Borland 推出良好的 dbExpress 驅動程式,亦不容易轉成 dbExpress 架構。BDE ODBC傳統的連結方法,基本上可連上所有ODBC支援的數據庫,且支援DataSnap / MIDAS 分散式多層架構。 好處:
Zeos 5.4.1http://sourceforge.net/projects/zeoslib 免費的BDE替代組件,直接存取多種數據庫,各數據庫有獨立組件。 好處:
Zeos 6.0.4http://sourceforge.net/projects/zeoslib 新一代的 Zeos,完全重新建購撰寫,和 dbExpress 類似一組元件共於多種數量庫,在 Connection 元件輸入使用那種制式(potocol)即可。 好處:
DirectSQLhttp://sourceforge.net/projects/directsql 這是一個免費又神奇的東西,讓你的程式不需要任何附加檔案(其他的全都需要 libmysql.dll) 便直接與 MySQL Server 對話,比 Zeos 更快。 由於這只是一個功能庫而沒有自己的視覺化組件,亦沒有DataSet給你連接資料感知元件,使用上非常類似直接以PHP存取 MySQL 。雖然如此,但作者亦提供一個方法將 Zeos 5.4.1 和 DirectSQL 合併,使 Zeos 5.4.1 的視覺他組件及 DataSet 可以跳過 Libmysql.dll 而直接以 DirectSQL 的功能存取 MySQL Server ! 好處:
ADO我以前用 Delphi 5 時試過用 ADO MyOLEDB 連結 MySQL,和 BDE 及 Zeos 作比較,不但速度極差,而且經常出現錯誤,所以完全放棄了這個方式。總結雖然現在已有不少方法讓 Delphi/Kylix 和 MySQL 結合起來,但是暫時卻沒有完全另人滿意的方案。最理想的當然是 Borland 儘快的推出認真更新的驅動程式,及開放該驅動程式源程式碼以便使用者自行修正錯誤,但大家也明白對大公司來說,這是不容易發生的。現在來說,若你信任 dbExpress 技術,先使用第三者 ODBC 驅動程式似乎是最好的方式,因為當 Borland 更新驅動程式時,應可輕而易舉的轉用新的驅動程式。若你不需要多層架構,Zeos系列亦不失為一個良好的途徑。其他連結dbExpress Plus 免費的 dbExpress 元件替代品,增加功能並條正 dbExpress 的一些錯誤 http://sourceforge.net/projects/dbexpressplus 最早期的 MySQL dbExpress driver 源程式,臭蟲多多,沒甚麼實用但可供參考。 http://bdn.borland.com/article/0,1410,27918,00.html Borland 新聞群組 news://newsgroups.borland.com (News Client) http://newsgroups.borland.com (Web) 筆者的網站 (Macromedia Flash 的外掛程式,用Delphi KOL寫的,完全沒打廣告,靠使用者介紹,才賣了約100套,失敗) http://www.lpflashex.com Peter Yau (Justmade) 2003-03-15 草稿 2003-03-16 於 Delphi K.Top 討論區發表 |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
補充資料
DBExpress 官方 Driver 的問題所有版本共同問題8. 使用日期 Param 會引至 Invalid Field Type 若使用日期 Param , 在埴入 Param 後開啟 Query 時會出現 Invalid Field Type 。
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
stevenliu
一般會員 發表:0 回覆:3 積分:0 註冊:2002-03-13 發送簡訊給我 |
|
swotcoder
一般會員 發表:1 回覆:16 積分:8 註冊:2003-07-12 發送簡訊給我 |
请问是否有相关的驱动编写资料? MySQL C API的版本与MySQL版本无关,他的版本号码以4.0、5.0、到目前的6.0发展。 大大的提出的问题是由于MySQL C API随后加入了配合事物功能而新增的函数造成的EXPORTS编号发生变化无法使用。事实上没必要经常更换libmysql.dll,当然由4.1.0版开始PASSWORD hash计算的方式发生变化所以配合4.1.0设计的应用必须更换libmysql.dll,其余情况通常无须更换。 另外,C++ Builder与Delphi均可以直接访问libmysql.dll而无须利用其它的外壳辅助。
|
vga
一般會員 發表:1 回覆:3 積分:0 註冊:2005-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |