delphi7+mysql5連接過程


關鍵點:delphi7, dbexpress, mysql5, utf8

昨天在筆記本上用delphi7連mysql5,首先查一下ado,不支持(除非通過odbc)。記得原來用過dbexpress成功過,放上控件,設置好參數,一連就好了。

隨后試着拉一條記錄,看能不能顯示中文,不行。。。出現亂碼。找了幾個英文資料,也不得要領。有人推薦MyDAC,下載一個,安裝上一看,你妹的,要注冊的好不?trial 60 days好不?

 

今天接着試。在辦公室的台式機上來。

發現和昨天筆記本上的不大一樣。(筆記本:win7,台式機:xp)

開始設置好連接,一連,出現

   Unable to Load libmysql.dll

查一下,這個好解決,把mysql安裝文件夾下的同名文件扔到c:\windows里就好了。

這時出現第二個錯誤:

  Access violation at address 010E9308 in module 'dbexpmysql.dll'. Read of address 00000002.
再次查資料,找到了以下兩篇

  http://hi.baidu.com/quantity123/blog/item/3806f1f3ad0f491cb07ec510.html Delphi7連接mysql5.x數據庫 (轉)

  http://www.justsoftwaresolutions.co.uk/delphi/dbexpress_and_mysql_5.html DbExpress drivers for MySQL V5.0  Just Software Solutions

里面講到要這樣做:(貼一下比較全)

修改delphi的安裝文件 X:\Program Files\Common Files\Borland Shared\DBExpress 下的兩個Ini文件

dbxconnections.ini
 仿照
 [MySQLConnection] 
 DriverName=MySQL
 HostName=localhost
 Database=kk21
 User_Name=root
 Password=xxxxx
 BlobSize=-1
 ErrorResourceFile=
 LocaleCode=0000

寫一段
 [MySQL5Connection]
 DriverName=MySQL5
 HostName=localhost
 Database=kk21
 User_Name=root
 Password=xxxxxx
 BlobSize=-1
 ErrorResourceFile=
 LocaleCode=0000

然后再修改dbxdrivers.ini
 仿照
 [MySQL]
 GetDriverFunc=getSQLDriverMYSQL
 LibraryName=dbexpmysql.dll
 VendorLib=libmysql.dll
 HostName=ServerName
 Database=DBNAME
 User_Name=user
 Password=password
 BlobSize=-1
 ErrorResourceFile=
 LocaleCode=0000
 寫
 [MySQL5]
 GetDriverFunc=getSQLDriverMYSQL50
 LibraryName=dbxopenmysql50.dll
 VendorLib=libmysql.dll
 HostName=ServerName
 Database=DBNAME
 User_Name=user
 Password=password
 BlobSize=-1
 ErrorResourceFile=
 LocaleCode=0000
 在寫項目時將兩個dll(libmysql.dll和dbxopenmysql50.dll)復制到項目所在文件夾,然后TSQLConnection組件中就可以使用MYSQL5驅動來連接msyql5.x的數據庫了

ps:libmysql.dll一般在mysql安裝目錄里或者再Apm服務器套件中搜尋

dbxopenmysql50.dll是老外修改的,鏈接地址http://www.justsoftwaresolutions.co.uk/delphi/dbexpress_and_mysql_5.html 
 該方法也適用於delphi2006連接mysql5.x

--------

OK,我下載了那個dbxopenmysql5_dll.zip,把里面的dll文件同樣扔到windows文件夾,修改完兩個ini文件,再用dbexpress連接,正常了。取回一個數字字段,正確。

下面是另一個關鍵點,當我拉取中文文字的時候,出現????這樣的字符。我知道是數據庫端使用了utf8的原因。試着用utf8toansi和utf8decode,還是不對。

要說起來,還是stackoverflow里面有用的東西多,最終找到:

  http://stackoverflow.com/questions/3598593/which-dbexpress-servercharset-do-i-need-for-utf8-data-in-mysql-5

這里面說:

  you have to set up a client charset.
  Simple "SET NAMES utf8" query, executed right after connect, will do the trick

意思是你要在客戶端設置一下charset。具體是調用一下SET NAMES utf8這個語句。

以下是我的代碼。測試成功:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLConnection1.Open;
  SQLConnection1.ExecuteDirect('SET NAMES utf8');
  SQLQuery1.SQL.Text := 'select * from xm2012_lookup where id=1';
  sqlquery1.Open;
  showmessage(utf8toansi(SQLQuery1.fieldbyname('name').asstring));
end;

-------------------------------

就是這樣。在此期間,從網上找了N多資料,都不是多么全,而且有不少誤導人的地方。寫下來備忘,還有方便后來人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM