这两天抽空研究了下Delphi2006如何连接Mysql5.1,过于追求新版本有时就会遇到此类问题,厂商实现不完善,有地方没实现或没考虑到的,直接用它的产品就会出问题。baidu搜了搜国内网站,好像还没此类文章,可能是没多少人在用Delphi2006了,呵呵。用google搜,还是老外nb啊,找到了不少连接的方法,有几种都是商业产品,例如mydac、dbx等,看看价格,还都不便宜,那个价人民币我都嫌贵,何况还是dollars。发财的机会还是很多的,趁厂商自己还没做开发个这样的数据库连接驱动也能赚一笔。大致找到了如下几种免费的办法,总结一下:
测试环境: WinXP+SP2 Delphi2006+SP2 mysql-5.1.14-beta-win32
1.ODBC+ADO 此种方法应该是最能保证稳定和正常进行数据库操作的,但效率无疑最低,而且ODBC现在用的人已经很少了,用户安装时还要配置个ODBC,这个麻烦事估计现在已经很少人还再做了吧。 在Mysql官网上下了个ODBC驱动,mysql-connector-odbc-5.00.10-beta-gpl-win32版本,还是beta版,但问题应该也不会太大,担心有问题的人还是用mysql-connector-odbc-3.51.12-win32这个版本好了,应该比较稳定。 安装完ODBC驱动,配置数据源。在“系统DSN”中添加一个数据源,选择“MySQL Connector/ODBC v5”驱动程序,然后设置连接参数。“Data Source Name”可自己随意起,Description随便写,Server填写数据库地址,User、Password就不用多说了吧,Database是要连接的数据库,Port可不填使用默认值,默认就是3306端口,如果修改了数据库连接端口自然在此也要做相应改动。如下图。
此时配置就完成了,点击确定后可看见多出了一个刚配置的数据源。
然后进行ADO配置,新建一udl文件。提供程序选择“Microsoft OLE DB Provider for ODBC Driver”,在“连接”选项卡中进行详细配置,使用数据源就是刚才配置的ODBC数据源名称,输入用户名、密码,初始目录空白,因为此时要连接的数据库早在ODBC中就已经被指定了。点击“测试连接”,提示成功就说明配置已经完成。
做一个最简单的Demo,在Form上放上TADOConnection、TADOQuery、TDataSource、TDBGrid四个控件,具体连接和属性设置就不多说了,不会连这些都不会吧,真不会就去查查别的书,设置方法都一样的。一行代码都不用写,连程序都不用运行,就能看到数据记录已经被查询出来了。
2.DBExpress+dbxopenmysql50.dll 可能很多人会奇怪,dbxopenmysql50.dll是什么东东?DBExpress不就是数据库连接组件了吗,为什么还要加上这个东西?这是由于Delphi2006中的DBExpress对Mysql高版本的支持很差,从国外论坛上看到的说法似乎是根本就没实现,所以说虽然TSQLConnection组件中提供了Mysql选项,但直接使用的话是不行的(低版本的mysql可能可以),我遇到的现象是提示“Unable to Load libmysql.dll”,但其实我已经在系统目录System32下、Delphi安装目录的bin中、开发工程项目文件夹中都安放了该文件,还是找不到该dll。 dbxopenmysql50.dll是由老外开发的,而且开源,还是老外好啊,可以到如下网址去下载: http://www.justsoftwaresolutions.co.uk/delphi/dbexpress_and_mysql_5.html 使用时需要将dbxopenmysql50.dll和libmysql.dll都放到工程文件夹下。顺便提一下,libmysql.dll在mysql安装目录下的\lib\opt目录中。 使用方法有两种,一种是直接修改Borland\BDS\4.0\dbExpress下的dbxdrivers.ini,调整其中关于mysql的各参数。 另一种就是在程序中指定,现在我以这种方式为例说明这种连接方式的开发方法。 在Form上放上TSQLConnection、TSQLQuery、TStringGrid、3个TButton、TLable。界面显示如下图。
在FormCreate事件中: SQLConnection1 := TSQLConnection.Create(nil); SQLConnection1.DriverName := 'dbxmysql'; SQLConnection1.GetDriverFunc := 'getSQLDriverMYSQL50'; SQLConnection1.LibraryName := 'dbxopenmysql50.dll'; SQLConnection1.VendorLib := 'libmysql.dll'; SQLConnection1.LoginPrompt := false; 在此设置TSQLConnection的各个具体参数,当然也可以直接在组件属性面板中修改,或者修改dbxdrivers.ini中的对应参数,方法是多种的。 Connect按钮的事件: SQLConnection1.Params.Append('Database=user'); SQLConnection1.Params.Append('User_Name=mysql'); SQLConnection1.Params.Append('Password=mysql'); SQLConnection1.Params.Append('HostName=localhost'); SQLConnection1.Open; if SQLConnection1.Connected = true then Label1.Caption := 'success' else Label1.Caption := 'fail'; 设置数据库连接的各参数配置后,打开数据库连接,同时显示连接是否成功。 Query按钮的事件: var i,j: Integer; begin SQLQuery1.SQL.Clear; SQLQuery1.SQL.Add('SELECT * FROM userinfo'); SQLQuery1.Active := true; i := 0; SQLQuery1.First; while not SQLQuery1.eof do begin for j:=0 to SQLQuery1.FieldCount-1 do StringGrid1.cells[j,i]:=SQLQuery1.Fields[j].AsString; SQLQuery1.next; inc(i); end; SQLQuery1.Active := false; 查询表数据并在StringGrid中输出。 Disconnect按钮的事件: if SQLConnection1.Connected = true then SQLConnection1.Close; FormDestroy事件: if SQLConnection1.Connected = true then SQLConnection1.Close; SQLConnection1.Free; 运行程序,点击connect按钮,如果数据库连接成功可以看到success提示,然后点击query按钮就能查询到表中的数据。
3.TMySQLDatabase 这也是老外开发的pas文件,只有两个文件libmysql.pas、mysqldatabasev10.pas,其它似乎什么都不要了,相当简练。可以去如下网址下载: http://tech.groups.yahoo.com/group/TMySQLDatabase/ 下载需要申请加入作者的组并等待批准,不过是全免费并且开源的。 使用时也只需将这两个文件放到工程文件夹中,然后就可调用了。下面开发一个简单的Demo。 在Form上放上TStringGrid、3个TButton、TLable。界面显示如下图。
在pas文件头的uses中添加MySQLDatabaseV10,说明引用了该单元。 添加声明: public MySQL: TMySQLDatabase; MySQLQuery: TMySQLQuery; end;
FormCreate事件: MySQL:=TMySQLDatabase.Create; 创建TMySQLDatabase。 connectToDB按钮的事件: MySQL.ServerName:='localhost'; MySQL.UserName:='mysql'; MySQL.Password:='mysql'; MySQL.DatabaseName:='user'; MySQL.Open; if not MySQL.Active then MessageDlg(MySQL.ErrorMessage, mtError, [mbOk], 0) else begin MySQLQuery:=TMySQLQuery.Create(MySQL); end; if MySQL.Active and MySQL.ServerReady then Label1.Caption := 'Success' else Label1.Caption := 'Fail'; 设置数据库连接参数,打开数据库连接,连接成功则创建TMySQLQuery,用以进行数据操作。 queryDB按钮的事件: var i, j: Integer; begin if MySQL.Active then begin MySQLQuery.clear; MySQLQuery.SQL.add('SELECT * FROM userinfo'); MySQLQuery.Open; i:=0; MySQLQuery.first; while not MySQLQuery.eof do begin for j:=0 to MySQLQuery.FieldCount-1 do StringGrid1.cells[j,i]:=MySQLQuery.FieldByNumber(j).AsString; inc(i); MySQLQuery.next; end; end; 查询表数据并在StringGrid中显示。 FormDestroy事件: if not MySQL.Active then MySQLQuery.free; MySQL.free; 运行程序,点击connectToDB按钮,如果数据库连接成功可以看到Success提示,然后点击QueryDB按钮就能查询到表中的数据。
总结: 由于没有深入使用这三种连接方式,无法对三者的稳定性、可行性、效率等做出比较。感觉这三者在做基本数据库操作时应该都不会有问题,但在某些深层次应用中难免会存在一些bug,需要在实际应用中去慢慢得见了。这些方面应该还是那些商业化的产品做的比较好吧,条件允许建议还是购买商业化产品,维护、升级等更有保障,开源的东西毕竟和作者的个人兴致关联很大,可能随时就不再更新和维护了。
|
请发表评论