zoukankan      html  css  js  c++  java
  • 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多资料,都不是多么全,而且有不少误导人的地方。写下来备忘,还有方便后来人。

  • 相关阅读:
    此刻,很想那些老朋友
    985工程介绍
    211工程介绍
    蓝牙耳机声音断断续续
    不支持用淋浴洗澡
    在HY买饭
    成长路上的六个W
    屎、洗脚水
    Ubuntu更换软件源
    视频流媒体服务器RTMP和RTSP区别是什么?如何区分?
  • 原文地址:https://www.cnblogs.com/anjo/p/2439335.html
Copyright © 2011-2022 走看看