文档库 最新最全的文档下载
当前位置:文档库 › ADOConnection、ADOCommand、ADODataSet

ADOConnection、ADOCommand、ADODataSet

ADOConnection、ADOCommand、ADODataSet
ADOConnection、ADOCommand、ADODataSet

TADODataSet 用于执行有返回的操作并保存返回的数据,通常是查询;

TADOTable 类似于TADODataSet ,不过是缩水版,只能单表查询;

TADOCommand 用于执行无返回操作的,如创建,删除,更新;

TADOQuery 兼有TADOCommand 和TADODataSet 的功能,当然TADOTable 的功能就更不在话下了。TADOQuery 的Open 执行有返回的,ExecSql 执行无返回的。

用法通常是:

关闭(无返回的不用);

设置SQL.Text(TADOQuery )或CommamdText(TADODataSet 和TADOCommand )属性;

打开(有返回的)或执行(无返回的)。

ADODataSet1.Close;// 或ADODataSet1.Active := false;

https://www.wendangku.net/doc/bf18210817.html,mandText := 'select * from ...';

ADODataSet1.Open; // 或ADODataSet1.Active := true;

ADOQuery1.Close;

ADOQuery1.Sql.Text := 'select * from ...';

ADOQuery1.Open;

ADOQuery1.Close;

ADOQuery1.Sql.Text := 'update ... set ...';// 或delete from ...

ADOQuery1.ExecSql;

https://www.wendangku.net/doc/bf18210817.html,mandText := 'delete from ...';// 或update ... set...

ADODataSet1.Execute;

************************************************************************

此文适合Delphi新手阅读,特别是连接数据库方面还一懂半懂甚至根本不懂的新手;

本文章以Delphi 7和SQL Server 2000为例,控件名均为系统默认,如

Unit1,DataModule1,Edit1,ADOCommand1,ADODataSet1,ADOConnection1,DataSource1等等。

初初接触Delphi时,想要连接数据库,但面对一大堆数据库类控件,无所适从,既不知该用哪个/些控件,也不知具体怎么连接数据库!

经过一段时间的“摸爬滚打”,算是初步摸索到了常用的连接方法。其实主要是用ADO连

接,而ADO也是最常用的连接技术之一。

以下几个控件在连接数据库时是用得比较多的,并且通常的的连接架构是

————————————————————

数据库

ADOConnection

↑↑

ADOCommand ADODataSet

DataSource

DBGrid

————————————————————

或者

————————————————————

数据库

↑↑

ADOCommand ADODataSet

DataSource

DBGrid

————————————————————

也就是说,ADOCommand和ADODataSet既可以通过ADOConnection连接数据库,也可以不用,分别直接连接数据库,因为这三个控件都有一个共同的ConnectionString属性。

第一种比第二种更节省资源,因为当要使用多个ADOCommand、ADODataSet等控件时,使用第一种连接架构只需将所有这些控件的Connection属性设置(选择)为同一个ADOConnection,这样就只有一个ADOConnection控件与数据库打交道,毕竟连接数据库是一种比较大开销的资源,尽量节省可以提高运行速度。

ConnectionString属性的设置很简单。选中要设置这一属性的控件后,再点击其ConnectionString属性框。如果熟悉的话可以直接在这里输入,但由于这一属性值比较长,所以通常的做法是构建,并且步骤也不多,一目了然:

·点击属性框后面的“...”小按钮,出现“连接源”对话框,选中“使用连接字符串”,再点击“构建...”按钮;

·首先选择“提供程序”。以连接SQL Server 2000 数据库为例,提供程序选择“Microsoft OLE DB Provider for SQL Server”;

·点击下一步;选择或输入服务器名框中,可以输入计算机名,也可使用计算机的IP地址,特别地,如果是单机使用的,可输入一个便于移植使用的IP地址,即指向本机的IP地址“127.0.0.1”;

·登录服务器信息,如果SQL Server 是集成登录的,选中“使用Windows NT 集成安全设置(W)”,然而多数情况下是选中“使用指定的用户名和密码”,并分别输入登录数据库的用户名和密码,通常是sa用户,而且如果是空密码的,可以选中下面的“空白密码”,至于“允许保存密码”,选不选就看个人喜好了;

·“在服务器上选择数据库”,选中所要连接的数据库;

·最后点击“测试连接”,通常会弹出“测试成功”的提示,确定即可。当然,前提是SQL 服务管理器已启动。

ADOCommand适合执行无返回结果的SQL语句,如插入、删除、更新等;ADODataSet则用于执行有返回结果的SQL语句,如查询;两都都有一个共同的CommandText属性,用以设置其所要执行的SQL语句。

通常所要执行的SQL语句不是固定不变的,而是在程序运行时根据用户的操作动态生成的。

对于ADODataSet,可双击相应按钮(如“提交查询”),在其onClick事件中相应的SQL 语句赋值语句,再将ADODataSet的CommandText属性设置为该字符串,最后改变ADODataSet

的Active属性即可,如:

sql:='select * from ....'; //其中sql为已定义的String类型变量

ADODataSet1.Active:=false;

https://www.wendangku.net/doc/bf18210817.html,mandText:=sql;

ADODataSet1.Active:=true;

执行查询操作后,判断查询结果是否为空,如果非空,并且可以确定查询结果是唯一,则可分别直接引用查询结果的各个字段:

if (ADODataset1.FieldValues['字段名1']<>NULL) then

//此处的“字段名1”为查询结果中的字段名,即数据库里相应表的字段名

begin

Edit1.Text:=ADODataset1.FieldValues['字段名1'];

//可引用查询结果,分别为各Edit控件的Text属性赋值,使之显示

Edit2.Text:=ADODataset1.FieldValues['字段名2'];

//等等

end

而如果查询结果不唯一,也可逐一引用各字段,不过需要稍加修改。而此时最常用的是向下拉框Combobox控件中添加项目,并且通常放在窗体的onShow事件中执行:

______________________________________________________________________________

unit Unit1; //当前窗体文件名

interface

uses

//.....

type

//……

//...

procedure TForm1.FormShow(Sender: TObject); //窗体的显示事件

var

i,j:integer; //for循环变量只能是局部变量

sql,item:String //字符串型

begin

//...

sql:='select 字段1 from ....'; //通常是查询单个字段

ADODataSet1.Active:=false;

https://www.wendangku.net/doc/bf18210817.html,mandText:=sql;

ADODataSet1.Active:=true;

j:=ADODataSet1.RecordCount; //j和后面的i定义为整形变量

ADODataSet1.First; //使指针指向(移动到)第一条记录 Combobox1.Items.Clear; //下拉框

Combobox1.Items.Add('请选择...'); //添加一个提示项到下拉框项目中 for i:=1 to j do //j为查询结果的记录数

begin

item:=ADODataSet1.FieldValues['字段1'];

//逐一引用当前记录的指定字段值 Combobox1.Items.Add(item); //添加到下拉框项目中

ADODataSet1.Next; //指针移动,指向下一条记录

end;

Combobox1.Text:='请选择...'; //显示提示值

//...

end;

//...

end.

______________________________________________________________________________

这样,在程序运行时打这个Form1窗体,该Combobox1下拉框的显示值就为“请选择...”,点击下拉框,其中就会有从数据库中查询出来的各个项目显示出来,以供用户选择。毕竟选择比输入快,而且如果输入的话,还要用户记住其内容,非常不方便。

至于查询有多个返回结果并且查询多个字段的,可以用DBGrid控件以表格形式显示全部查询结果,不过此时需要添加一个DataSource控件,并且将将DBGrid的DataSource属性设置为该DataSource控件,再将该DataSource的DataSet属性设置为相应的ADODataSet控件,如上面的连接架构所示。

对于ADOCommand,稍稍有点不同。因为它是通过Execute方法执行SQL语句的:

begin

sql2:='insert into 表1 ......';

//可用于执行insert into,update,delete语句

ADOCommand1.Execute;

showmessage('操作成功。'); //操作完成后给出提示

end

如果要使用的ADOCommand、ADODataSet等控件不多时,可以不用ADOConnection控件,直接使用ADODataSet和(或)ADOCommand控件,只需分别设置其ConnectionString属性;

若要使用多个ADOCommand、ADODataSet等控件时,有一个办法可以节省使用控件的数量:

建立一个DataModule窗体,假设窗体名为DataModule1,并将ADOConnection、ADOCommand、ADODataSet、DataSource等数据库控件建立在该DataModule1窗体中,然后在所有需要使用这些控件连接数据库的窗体中使用该DataModule1窗体。如果该DataModule1窗体名保存为Unit2文件,则在需要使用这些控件的Uses列表中加入Unit2即可,但在引用时需要在控件名前加上窗体名,如:

unit Unit3; //当前窗体文件名

interface

uses

//.....

Unit2; //引用DataModule1窗体的窗体文件名Unit2

type

//……

DataModule1.ADODataSet1.Active:=false;

https://www.wendangku.net/doc/bf18210817.html,mandText:=sql;

DataModule1.ADODataSet1.Active:=true;

//...

Edit1.Text:=DataModule1.ADODataset1.FieldValues['字段名1'];

//...

DataModule1.ADOCommand1.Execute;

也就是:如果所使用的控件不是在当前窗体的,而是通过使用窗体引用的,就需要在控件名前加上窗体名。

或者可以这样省略窗体名:

with DataModule1 do

begin

ADODataSet1.Active:=false;

https://www.wendangku.net/doc/bf18210817.html,mandText:=sql;

ADODataSet1.Active:=true;

//...

end

ADO的另一种用法

在使用ADODataSet时通常要设置三个属性Connection,CommandText和CommandType.

然后再去Open.还有一种简单的方法即设置Recordset属性.

ADODataSet.Recordset:=ADOConnection.Execute('select * from UserInfo');

只要这一句代码就可以了

相关文档