Allen 2010-11-10 15:52:40 17032 1 0 0 0

自己未能搞定,搜到篇好文,可惜在原地址显示不全啊~~在这里保存一下,也便于查看!

这两天抽空研究了下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安装目录下的libopt目录中。 
使用方法有两种,一种是直接修改BorlandBDS4.0dbExpress下的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,需要在实际应用中去慢慢得见了。这些方面应该还是那些商业化的产品做的比较好吧,条件允许建议还是购买商业化产品,维护、升级等更有保障,开源的东西毕竟和作者的个人兴致关联很大,可能随时就不再更新和维护了。

来源:http://hi.baidu.com/lightning119/blog/item/28f2f4941d06ce1bd31b70fc.html


Tag: Delphi技巧 Mysql 编程 TTTBLOG
我也要发一个   ·   返回首页   ·   返回[Delphi]   ·   前一个   ·   下一个
评论
Allen#1Allen 2010-11-10 17:26:52(N) 链接地址
| 1278 | 七七 | 2010-11-10 17:26:52 | [email protected] | http://www.wukenan.com/ |
-----
嗯,关注支持,得慢慢去琢磨
顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Delphi]   ·   返回顶部