Delphi为我们提供了强大的数据库连接控件,如dbExpress,其执行效率不亚于ADO。有关于它的一些使用方法,我提一下自己总结的愚见。

一、连接MySQL数据库的问题:

1.       创建一个工程,在窗体上放置控件TSQLConnection,此控件是Delphi连接MySQL的关键一步,其设置大体如此:双击TSQLConnection控件打开设置窗,


在窗口右侧Key栏下DriverName中设置数据库类型(目前dbExpress只支持MySQL、DB2、Informix、InterBase、Orcale五种数据库),我们设置”MySQL”;HostName栏用于指定被连接的数据库所在的计算机,此处设置为服务器数据库Server;Database用于指定数据库名称,指定为Test;User_Name指定了此HostName下的用户名称,为root。至此,连接选项配置完成。

1.       再将TSQLConnection控件下的LibraryName属性改为“dbexpmys.dll”。

2.       将Connected属性改为True,即可连接成功。

注:若TSQLConnection控件的LoginPrompt属性为True,在连接时会弹出连接窗,如果数据库无密码,直接确定即可。

二、操作数据库

连接成功之后,在窗体放入TSQLQuery控件,将SQLConnection属性设置为SQLConnection1即可运行Sql语句操作数据库。

三、显示数据

数据显示通常采用TDBGrid控件,但此控件是双向的,而TSQLConnection和TSQLQuery是单击数据集,即只读不写。直接将TDBGrid连接到TSQLQuery上是行不通的。我们可以采用多层数据的办法解决,即放置TclientDataSet和TdataSetProvider组件先将

TDBGrid.DataSource->DataSource 

DataSource.DateSet->ClientDataSet

ClientDataSet.ProviderName->DataSetProvider

DataSetProvider.DateSet->SQLQuery;之后,将ClientDataSet.Active属性置为True即可在TDBGrid上显示所连数据库。

四、程序设置数据库

程序设置TSQLConnection控件的各参数与手动设置大体相同,但应遵守一定的顺序,不可颠倒,如下所示:

SQLConnection2.DriverName := 'MySQL';
SQLConnection2.Params.Add('DriverName=MySQL');
SQLConnection2.Params.Add('HostName=server');
SQLConnection2.Params.Add('Database=test');
SQLConnection2.Params.Add('User_Name=root');
SQLConnection2.Params.Add('Password=');
SQLConnection2.Params.Add('BlobSize=-1');
SQLConnection2.Params.Add('ErrorResourceFile=');
SQLConnection2.Params.Add('LocaleCode=0000');
SQLConnection2.VendorLib := 'libmysql.dll';
SQLConnection2.GetDriverFunc := 'getSQLDriverMYSQL';
SQLConnection2.LibraryName := 'dbexpmys.dll';
SQLConnection2.ConnectionName := 'cao';
SQLConnection2.Connected := True;
ClientDataSet2.Active := True;

即:先设置DriverName,再设置Params,最后才是VendorLib、GetDriverFunc、LibraryName、ConnectionName等,再次dbexpmys.dll(92K)是dbExpress自身的连接库,也可为dbexpmysql.dll(93.5K),另外,libmysql.dll(212K)是mysql自身使用的接口库,我查看了一下libmysql.dll内有81个接口函数,有此两个库,即可连接mysql,但必需注意,这些接口库要么与Exe平级存在,要么存在于系统盘system32目录下。

五、在界面上更新数据

TSQLConnection是单向数据集,不能在界面上直接修改,但我们用TclientDataSet和TdataSetProvider建成了多层结构,在修改的时候通过TclientDataSet控件的ClientDataSet1.ApplyUpdates(-1);方法即可更新到数据库中。

 

注意:由于MYSQL4.0以上的版本采用了密码加密技术,有可能导至dbExpress在连接4.0以上的服务时出现无效的用户名或密码的提示,起初我也百思不得其解,总认为自己服务装得有问题,后来,经高人指点得知此因。具体解决办法如下:

   1、登录mysql服务器(在mysql安装目录下进入bin中输入命令:mysql -hmysqlhost  -umysqluser  -pmysqlpassword;

   2、在mysql>提示符下输入SET PASSWORD FOR ‘需要修改的用户名’@'mysql服务器的IP' = OLD_PASSWORD('newpwd');