三、 ADODataset组件
ADODataset是ADO组件中最通用的一个组件,它能获取并代表任何其他ADO组件从数据库返回的数据集合。数据集是通过SQL命令返回的一个表或者多个表数据。
要使ADODataset数据集组件能够正常地发挥作用,则应首先设置其Connection或Connection String属性来建立起到数据库的连接。如果要使用一个RDSDataSpace对象将该数据集连接到基于ADO的应用程序服务器,则需要RDSConnection属性设置为一个TRDSConnection对象。
由于ADODataset组件必须返回一个结果集,所以其CommandText属性中如果使用语句,则只能使用SELECT语句,而不能使用一引起数据操作语言(DML),比如DELETE、INSERT和UPDATE语句。
同时由于该数据集可以使用SQL 语句。所以可以从一个或多个基表中查询数据。
? ADODataset的常用属性
1) Active
指示当前的记录集是否处于打开状态,调用open方法,打开数据库,Active值为True;调用close方法,数据库关闭,则Active为False;
只有Active的值为False时,应用程序才能对数据库进行读写操作。需要将Active变为True的情况是:
v 数据库的状态设为dsBrowse(浏览模式、查看、扫描数据)。
v 如果程序中加载了BeforeOpen事件,在该事件被触发时。
v 如果程序加载了AfterOpen事件,在该事件被触发时。
v 通过记录集打开一个数据指针时。
在更改数据集属性,且这些属性影响到数据库的状态或数据显示组件的状态时,要提前将数据集的Active属性设置为False;
2) AutoCalcFields
设为True,则允许应用程序触发On
v 数据集组件的状态变为dsEdit。
v 记录已经被修改。
v 应用程序从数据库中重新获得一条记录。
可以看出,上述的情况并不都需要更新计算字段。如果用户需要频繁地修改数据,则On
3) Cachesize
指定数据集的缓冲区大小。数据集首先把数据从数据库中取出,然后保存在内存的一块域中。这块内存区域就是所谓的缓冲区。如果设置CacheSize为20,则表示数据集将一次从数据集将一次从数据库中提取20条记录并将这20条记录保存到缓冲区中。缺省值为1,也是最小值。
4) CommandText
指定数据集合中包含的命令,可以是SQL语句,一个表名或者一个存储过程名。常用的调用形式为:
with ADODataset1 do
begin
commandType:=cmdText;
command Text:=’Select * From customerTable’;
open;
end;
5) Filer
数据集的过滤器,通过使用过滤器可以把那些不需要的数据过滤掉。设置Filter属性的典型方法为:
with ADODataset1 do begin
Filterd:=False;
Filter:=’State=’+Quotedstr(‘CA’)+’OR’+”State=’+Quotedstr(‘CA’);
Filterd:=True;
End;
如果用户修改了带有过滤数据集的数据,修改的结果如果不满足过滤器的条件,则修改的数据就自动从当前的数据库中消失。
6) MaxRecord
最大 返回数据集记录数,默认值为0 返回所有数据。
7) RecordCount
显示与数据集相连的记录的总数
详细的属性大家可以看最后一页
ADODataset的常用方法
1) GetIndexNames(List:Tstring)
查询表中的全部索引,返回值将保存在参数List中,调用方法为:
ADODataset1.GetIndexNames(ListBox1.Items);
2) DeleteRecords(AffectRecords:TaffectRecords=arAll)
删除记录集的记录,参数AffectRecords用于指定要删除的具体记录。它的取值可为如下:
AffectRecords的参数及说明
参数值 说明
arCurrent 仅删除当前记录
arFiltered 删除满足过滤器过滤条件的数据
arAll 删除记录的所有记录
arAllChapters 删除ADO连接数据部分的全部记录
缺省值为arAll,删除当前记录集中的所有记录。
3) Locate(const KeyFields:String;constKeyValues:Variant;Options:TLocateOptions)
定位一条记录并把这条记录作为当前记录。其中KeyFields是索引的字段名;KeyValues是要查找的值;Options是定位数据选项,他的值可以是:
v IoCaseInsensitive:定位数据不区分大小写。
v IoPartialkey:部分匹配定位查找数据。
4) Requery(options:TexecuteOption=[])
刷新数据集中的数据,它是通过重新执行原来的命令或SQL语句来重新生成记录集。
5) SaveToFile(constFileName:String=’’;Format:TpersisFormat=PftAdTg)
把当前数据集中的数据按照指定的格式保存到指定的文件中。FileName为指定的文件名:Format为保存的文件格式,它可以选取下列值:
v PfAdTG:按照ADTG(Advanced Da
v PfXML:按照XML格式保存文件。
6) seek(constKeyValues:Variant;seekOption:Tseekoption=SoFirstEQ)
搜索记录并移动数据集的指针。搜索动作是以当前数据集中的索引为搜索依据。其中KeyValues为被搜索的值。
Success:=ADODataSet1.seek(‘Jones’,SoFirstEQ);
如果搜索到复合索引的值,则返回True,反之为False,也可以同时搜索多个值:
ADODataSet1.seek(VarArrayof([90030,90020]),soFirstEQ);
这就需要利用函数VarArrayof()构造一个参数传递给KeyValues。
Seek的第二个参数seekoption限定了搜索行为的动作。
可以取的值如下:
Seekoption的取值及说明
参数值 说明
SoFirstEQ Rexord 数据库指针定位在第一条匹配的记录处,如果没有任何匹配记录则指向数据库的未记录
SoLastEQ Record 数据库指针定位在最后一条匹配的记录处,如果没有任何匹配记录则指向数据库的未记录
SoAfterEQ Record 如果搜索到匹配记录,在指向匹配记录的下一条,如果没有找到则指向最近似匹配记录上
SoAfter 指向匹配记录的下一条
SoBeforeEQ 如果搜索到匹配记录,在指向匹配记录的前一条,如果没有找到则指向最近似匹配记录上
SoBefore 指向匹配记录的前一条