认识AdoQuery、AdoQuery、TADOConnection、TADOCommand 等组件的用法
认识AdoQuery
ADO技术是微软提出来的处理关系型数据库和非关系型数据库的新技术,它基于微软被称为OLEDB的数据访问模式,它是专门为了给大范围商业数据源提供访问而设计的,包括传统的关系型数据表、电子邮件系统、图形格式、Internet资源等。ADO所需内存更少,更适合大流量和大事务量的网络计算机系统。
ADO顶层有三个对象:Connection、Command、Recordset。
Connection 用以指定数据源,建立和数据源的连接。
Command 对象用以对数剧源执行指定的命令,可以接受SQL语句,表和存储过程的名称,执行SQL查询,更新数据,插入纪录等。
Recordset 对象表示的是来自表或命令执行结果的记录全集,操纵来自提供者的几乎所有数据。
由于ADO技术的迅速普及,从Delphi5.0开始,加入了ADO技术的模块,并逐步成为Delphi数据库设计的主流。但是,和VB的ADODC相比,它还是有所不同的,在数据绑定上,它更多的吸收了BDE的特点,以做到和原来的程序兼容,同时,它又可以接受标准ADO技术的各种属性和方法,在接受这些属性和方法时,它是和数据绑定控件脱离的,当然从某种意义上来说,这种方案提高了执行效率,给设计人员以更多的选择。
由于ADO技术的迅速普及,从Delphi5.0开始,加入了ADO技术的模块,并逐步成为Delphi数据库设计的主流。但是,和VB的ADODC相比,它还是有所不同的,在数据绑定上,它更多的吸收了BDE的特点,以做到和原来的程序兼容,同时,它又可以接受标准ADO技术的各种属性和方法,在接受这些属性和方法时,它是和数据绑定控件脱离的,当然从某种意义上来说,这种方案提高了执行效率,给设计人员以更多的选择。
ADOQuery组件
和 ADOtable 组件一样,ADOquery 继承了同一个父类 TCustomADODataSet,所以,上 面说到的 ADOtable 属性事件和方法基本上是通用的,但它主要是针对数据库中的 SQL 命 令进行操作。 下面主要说一下 ADOquery 特殊的地方。
1)SQL 属性 SQL 是 TStrings 类型的属性,包含了 ADOquery 组件要执行的 SQL 命令,是ADOquery 最为重要的属性之一。 在应用程序中,需要调用 Open 方法或者 ExecSQL 方法来执行在 SQL 中的命令。在设 计阶段,可以利用属性编辑起来编写。
注意:如果是查询操作,使用Open,如果不需要返回结果集,则使用 execsql。
执行添加记录语句:
执行修改记录语句:
执行删除记录语句:
执行查询语句:
记住:返回数据集的要用Open;
实际上我们在开发数据库程序的时候,一般都用Delphi自有的方法去操作数据库:
AdoQuery进行动态查询
方法一:字符串拼接方法
方法二:为 SQL 语句设定参数
ADOQuery组件的 Parameters属性
ADOQuery组件的 ParamByName方法
ADOQuery对象的 ParamValues属性
TADOConnection的动态数据库连接
先动态建立连接,代码实现如下:
其中 getcurrentdir 为获得当前路径的函数 function GetCurrentDir: string;.
再动态创建AdoQuery
1.先定义一个 TADOQuery 的变量 Query;
2.创建 Query :Query :=TADOQuery(self);
3.连接数据源 :Query.connection :=ADOConnection1;
4.Query 的 SQL 的清空 :Query.SQL.Clear;
5.Query 的 SQL 语言的赋予:Query.SQL.Text 或者 Query.SQL.Add();
6.Query 的参数赋值:Query.Parameters.ParamByName(‘’).Vale;
7.Query 的 SQL 语句的执行:Query.Open 或者 Query.ExecSQL;
8.Query 的关闭:Query.Close;
9.Query 的释放:Query.Free;
TADOCommand 组件的用法
在 ADO 的层次结构中,Command 对象和 RecordSet 是处在同一层上,它主要用来对数据源执行指定的命令。比如 SQL 语句,表和存储过程的名称、更新数据,插入纪录等。虽然其它的控件也能执行这些方法,但需要遇到需要用 Command 本身的属性和方法来控制数据源的时候,利用这个对象将是十分方便的事情。
在使用 TADOCommand组件前需要为指定 TADOConnection连接组件与数据库相连,也可以设置自己的 ConnectionString属性,使用方法和 TADOConnection组件的 ConnectionString属性相同。
重要属性说明:
CommandText属性
该属性可指定利用 ADO命令组件要执行的命令,该命令通常是文本形式的 SQL语句、一个数据表格名或一个存储过程名。
SQL语句文本,例如:
ADOCommand1.CommandText := ‘select * from DCPost’;
一个带参数的例子:
下面是一个使用CmdTable例子,由于返回一个数据集,使用TADODataSet对象来接收。
在对象查看器中双击 CommandText 属性,打开 CommandText Editor 对话框,如图 所示。
如果设置了 ConnectionString或者 Connection属性,则可以在窗口的 Tables列表中看到ADO数据源中所有可以使用的数据表,单击某个数据表,则下面的 Fields列表中将显示该数据表中的全部字段。在右边的 SQL编辑区中可以编辑 SQL语句,以返回数据集。双击 Fields列表中的某个字段,可以自动生成部分 Select语句,再双击 Tables列表中的数据表可以自动生成全部的 Select语句。
CommandType属性
CommandType属性用于说明 CommandText属性中的操作命令类型,其默认值为 cmdUnknown。当 CommandText属性的内容为数据表格名时,CommandText的属性值就应当为 cmdTable或者是cmdTableDirect。
cmdText:一个命令的文本定义或者是一个存储过程的调用。数据由一个内部的 SQL 语句返回。
cmdTable:一个数据表的名字。
cmdStoredProc:一个存储过程的名字。
cmdFile:一个被保存的数据集文件名。
cmdTableDirect:一个数据表的名字,该数据表的全部字段将被返回。
Execute方法
该方法返回一个数据集,对于DDL和非Select语句,则返回一个空集。如果返回的是一个数据集,则必须使用TADODataSet对象来接收。
ADODataSet与ADOQuery的区别
此组件功能是非常强大的,通过ADODataset,可以直接与一个表进行联接,也可以执行SQL语句,还可以执行存储过程,可以说集ADOTable、 ADOQuery、 ADOStoreProc三者的功能于一身。
在使用时,首先设定其Connection属性为ADOConnection组件,没有 ADOConnection组件就直接设定ConnectionString属性。接下来有两个重要属性CommandType与 CommandText,这两个属性相互关联的。CommandType决定采用何种方式如存储过程、数据表还是其他等等,一旦设定了 CommandType,CommandText属性就可以相应设定了。比如设定CommandType为cmdTable,那么CommandText 就会列出所有的数据表供选择,如果选择CommandType为cmdStoredProc,则CommandText将会列出所有的存储过程供选择,如 果选择CommandType为cmdText,那么单击CommandText属性后的省略号将会打开“CommandText Editor”,在这里其实就是让用户编写SQL语句的,此窗体提供了数据表列表及数据表中字段列表,给用户提供了方便,使得编写SQL语句更容易。如果 你对写SQL语句比较熟悉的话根本无需其帮助,还不如自己手写的快。设定完这些属性最后设定其Active属性为True即可,如果有参数请在属性中设定 一下。此组件和DataSource相连后就可DbGrid等组件中显示。
ADO存取技术组件几乎是采用一对一的方式来封装原生的ADO物件﹐TADODataSet组件了ADO的RecordSet物件﹐并且提供了和 Delphi的资料感知组件连结的能力﹐TADODataSet组件的CommandType特性代表了TADODataSet封装的RecordSet 物件会执行什么形态的命令﹐我们可以把TADOTable组件看作是封装设定CommandType为cmdTable的RecordSet物件﹐把 TADOStoredProc组件看作是封装设定CommandType为cmdStoredProc的RecordSet物件﹐但对于 ADOCommand﹑ADOQuery组件来讲还是有一些些区别。
可以把TADOQuery组件看作是封装设定CommandType为cmdText的RecordSet物件﹐但若使用TADODataSet组件﹐其 所使用的SQL叙述必须是有回传资料的语法(如Select等)﹐其不支援无回传资料的语法(如Insert, Delete, Update等)﹐而TADOQuery组件无此限制﹐可使用有回传资料和无回传资料的语法﹒
而TADOCommand组件也是使用SQL语言的组件﹐但其和TADODataSet组件的不同之处在于其只能使用于资料定义语言(Data Definition Language)和无回传资料的SQL语法﹐其作用在于TADOCommand组件使用的资源较少﹐如果ADO应用程式中有经常需要执行不回传资料的 SQL叙述时﹐使用TADOCommand组件可得到较好的效率﹒另外需要说明的一点是在TADOCommand组件中使用有回传资料的SQL语法并不是 不可以﹐只是必须再搭配一个ADO的资料集组件才可以接受由TADOCommand回传的结果资料﹐所以不如直接使用ADOQuery或 ADODataSet来得节省资源。