tdataset介绍.doc_第1页
tdataset介绍.doc_第2页
tdataset介绍.doc_第3页
tdataset介绍.doc_第4页
tdataset介绍.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

tdataset介绍2009-03-20 8:14tdatasettdataset是所有数据集的虚拟类,不能直接创建它的实例,也不能直接访问它的特性和方法,因为这些特性和方法大多是虚拟的或抽象的。从功能上分,Tdataset的成员可以分为这么几大块:打开和关闭数据集、浏览记录、编辑数据、书签管理、访问字段、记录缓冲区管理、过滤、事件。tdataset的常用的特性和方法。1、active特性声明:property active:boolean;通过active特性来判断数据集是否打开。2、autocalcfields特性声明:property autocalcfields:boolean;当程序从数据集中检索记录时,将触发oncalcfields事件。如果autocalcfields特性设为true,当非计算字段的值被更新时,也将触发这个事件。注意:如果autocalcfields设为true,在处理oncalcfields事件的句柄中不能再修改数据集,否则,将老是触发这个事件,从而导致无限循环。3、BOF特性声明:property bof:boolean;如果当前记录是数据集的第一条记录,则这个只读的特性将返回true.当程序第一次打开一个数据集或者调用first()方法后,当前记录就是第一条记录。4、bookmark特性声明:property bookmark:tbookmarkstr;书签用于保存数据集中某个记录的位置,这样,就可以方便地回到书签所标记的地方。如果读这个特性的,返回当前记录的书签(如果有的话)。也可以写这个特性来指定一个已有的书签,使书签标记的记录成为当前记录。5、canmodify特性声明:property canmodify:boolean;如果这个只读的特性返回false,表示数据集的只读的,不能修改。不过,即使canmodify特性返回true,也并不意味着数据集一定能修改。6、constraints特性声明:property constraints:tcheckconstraints;这个特性用于给数据集建立纠错规则(仅限于记录级)。在运行期,可以通过tcheckconstraints对象和tcheckconstraints对象来操纵每一个纠错规则。7、datasetfield特性声明:property datasetfield:tdatasetfield;这个特性是一个tdatasetfield对象,它代表一个嵌套的数据集。8、EOF特性声明:property eof:boolean;如果当前记录是数据集的最后一条记录,则这个只读的特性将返回true.当程序打开一个空的数据集或者调用了last()方法后,当前记录就是最后一条记录。9、fieldcount特性这个只读的特性返回数据集中的字段数。由于数据庥中可能包含动态生成的字段,因此,这个特性返回的字段数与物理字段数可能不同。10、fieldlist特性声明:property fieldlist:tfieldlist;通过这个特性可以访问一个数据集中所有字段的名称。11、fields特性通过这个特性,可以访问数据集中每一个字段(tfield对象),序号从0开始。12、fieldvalues特性声明:property fieldvaluesconst fieldname:string:variant;default;通过这个特性,可以按字段名来访问字段的值。fieldvalues特性的数据类型是variant.它可以表达任何类型的值,因此不需要诸如asstring、asinteger来转换字段的值。13、filtered特性声明:property filtered:boolean;在很多情况下、程序往往只关心数据集中的部分记录,这就需要把满足特定条件的记录过滤出来,要过滤记录,有两种方式:1.调用locate()来寻找匹配的记录。2.把filtered特性设为true,并且通过filter特性来指定一个过滤条件,这样,数据集中的指针在移动时,就会触发onfilterrecord事件。通过accept参数可以控制是否过滤某记录。要取消过滤,可以把filtered特性设为false,这样,onfilterrecord事件不再触发。不过,要显示所有的记录,必须调用refresh().14、filter特性。这个特性用于设置过滤条件,实际上是一个字符串,其格式类似于sql,select语句中的where部分。过滤条件中可以含有比较运算符,诸如,=,=,=,等,如果字段的名称本身含有空格,要用一对方括号把字段名括起来。例如:home state=ca or home state=ma15、filteroptions特性,这个特性用于设置过滤选项。tfilteroptions是一个集合,可以包含下列元素: focaseinsensitive:大小写不敏感; fonopartialcompare:对于字符串类型的字段必须全字匹配。16、recordcount特性声明:property recordcount:longint;这个只读的特性返回数据集的记录数。注意:如果对数据集进行了过滤或设置范围,则recordcount特性返回的记录数与物理记录数可能不同,不过,对于dbase表来说,recordcount特性总返回物理记录数。17、state特性。这个只读的特性返回数据集当前的状态,可以是以下值:dsinactive:数据集已关闭,不能访问;dsbrowse:数据集处于活动状态,能够浏览它的数据但不能编辑;dsedit:数据集处于活动状态,能够编辑;dsinsert:数据集处于活动状态,能够插入记录;dssetkey:数据集处于活动状态,正在调用setrange;dscalcfield:数据集处于活动状态,正在处理oncalcfields事件;dsfilter:数据集处于活动状态,正在处理onfilterrecord事件.18、append过程.这个过程将在数据集的末尾添加一条新的记录。只有当数据集允许修改时,才能调用append().因此,在调用append()之前,一定要先访问canmodify特性。19、appendrecord过程声明:procedure appendrecord(const values:array of const);这个过程类似于append(),它也能够在数据休的末尾添加一条记录,不同的是,appendrecord()需要传递一个values参数,这是一个数组,用来设置记录的值。要注意,元素的顺序、个数、数据类型都必须与字段一致。20、bookmarkvalid函数声明:function bookmarkvalid(bookmark:tbookmark):boolean;如果bookmark参数指定的书签是合法的,这个函数就返回true.21、cancel过程。在调用post()之前,要取消所作的修改,可以调用cancel().这样,数据集的回到dsbrowse状态。22、clearfields过程。这个过程将把当前记录的所有字段值清空,这样,有可能导致计算字段被更新,并触发与数据集关联的tdatasource元件的ondatachange事件。注意:如果数据集不处于dsinsert或dsedit状态,调用clearfields()将触发异常。23、close过程。这个过程用于关闭数据集,使它处于inactive状态,相当于把active特性设为false。在修改数据集的其它特性前,一定要先调用close()来关闭数据集。24、controlsdisabled函数。如果这个函数返回true,表示数据集与数据源暂时断开了连接。这是,即使数据集的数据发生变化,数据感知控件也不会刷新。25、delete过程。这个过程用于删除当前记录。这样,下一条记录就变成当前记录。如果删除的是最后一条记录,则前一条记录变成当前记录。26、disablecontrols过程。这个过程用于临时断开数据集与数据源的连接。这样,即使数据集发生变化,关联的数据感知控件也不会随着刷新。当需要连续多次在记录之间移动时,最好调用disablecontrols()来暂时断开与数据感知控件的连接,这样可以避免数据感知控件老是在不必要地刷新数据。27、enablecontrols函数。这个过程用于恢复数据集与数据源的连接。调用disablecontrols()将使一个内部的计数加1,调用enablecontrols()将使这个计数减1。当计数减到0的时候,就恢复与数据源的连接。也就是说,调用了几次disablecontrols(),就要调用几次enablecontrols().28、edit过程。这个过程使数据集进入编辑状态。只有在编辑状态下才能修改数据。29、fieldbyname函数声明:function fieldbyname(const fieldname:string):tfield;这个函数通过字段名来访问当前记录的某个字段(tfield对象)。根据字段名来访问比用序号来访问字段要安全些,因为序号很容易记错,也可能动态改变。不过,当根据名称来访问字段时,如果指定的字段不存在,将触发异常。因此,如果不能确定数据集中是否有这个字段,最好调用findfield()来访问字段。30、first过程。这个过程使过滤范围内的第一条记录变成当前记录。如果当前有未决的记录,将首先调用post().如果没有设置过滤范围,这个函数将返回表的第一条记录。31、freebookmark过程声明:procedure freebookmark(bookmark:tbookmark);书签也是系统资源,用完后应当及时释放。32、getbookmark函数声明:function getbookmark:tbookmark;这个函数创建一个书签来标记当前记录,以后可以通过gotobookmark()来回到这个记录。如果数据集是空的,或者不处于dsbrowse状态,这个函数将返回nil。注意:当数据集关闭或索引发生变化时,书签将无效。33、getcurrentrecord函数声明:function getcurrentrecord(buffer:pchar):boolean;这个函数把当前记录方到buffer参数指定的缓冲区,缓冲区的大小应不小于recordsize特性的值。如果调用成功,这个函数将返回true。34、getdetaildatasets过程声明:procedure getdetaildatasets(list:tlist);要表达master/detail关系,可以用游标来链接,也可以用嵌套数据集。getdetaildatasets()能够把当前记录的所有detail数据集放到一个列表中。35、getfieldnames过程声明:procedure getfieldnames(list:tstrings);这个过程把数据集中的所有字段的名称放到一个列表中。36、gotobookmark过程声明:procedure gotobookmark(bookmark:tbookmark);这个过程使bookmark参数指定的书签所标记的记录重新成为当前记录。37、insert过程。这个过程类似于append()。不同的是,insert把新记录插在当前位置,而不是末尾。38、insertrecord过程声明:procedure insertrecord(const values:array of const);这个过程类似于appendrecord()。不同的是,insertrecord()把新记录插在当前位置,而不是数据集的末尾39、isempty函数。如果数据集是空的,一条记录都没有,这个函数将返回true.40、last过程。这个过程使过滤范围内的最后一条记录变成当前记录。41、locate函数声明:function locate (const keyfields:string;constkeyvalues:variant;options:tlocateoptions):boolean;virtual;这个函数在数据集中搜索符合条件的记录。如果找到,就把找到的记录作为当前记录。keyfields参数是一个字符串,用于指定要搜索的字段名,字段与字段之间用分号隔开;keyvalues参数用于指定字段的值;options参数用于设置搜索选项。42、lookup函数声明:function lookup(const keyfields:string;const keyvalues:variant; constresultfields:string):variant;这个函数类似于locate(),用于从数据集中搜索符合特定条件的记录。其中,keyfields参数是一个字符串,用于指定要搜索的字段名,字段与字段之间用分号隔开;keyvalues参数用于指定这些字段的值;如果找到匹配的记录,这个函数将返回resultfields参数所指定的字段的值。43、moveby函数声明:function moveby(distance:integer):integer;这个函数用于改变游标,即当前记录的位置。distance参数指定了相对于当前记录的距离。例如,moveby(-2)将使前面第二条记录变成当前记录;moveby(3)将使后面第三条记录变成当前记录。如果数据集处于dsinsert或dsedit状态,moveby()将首先调用post().44、next过程。这个过程使过滤范围内的下一条记录变成当前记录。45、OPEN过程。这个过程将打开数据集,使它处于dsbrowse状态,相当于把active特性设为true。46、post过程。这个过程将把修改了的记录写到数据库中。如果数据集处于dsedit或dsinsert状态,则保持原来的状态不变。如果数据集处于dssetkey状态,则返回到dsbrowse状态。有的操作相当于调用post().例如,当用户把输入焦点从当前记录上移走时,或者调用next()、moveby()、prior()、first()、last()时,则隐含调用了post()。47、prior过程。这个过程使过滤范围内的前一条记录变成当前记录。48、refresh过程数据库是一直在变化的,因为它不断地被添加、删除或修改记录,尤其是在一个网络环境中。为了获得最新的数据,可以调用refresh()。refresh()相当于先调用close()来关闭数据集再调用open()来打开数据集,但直接调用refresh()要快一些。49、setfields过程声明:procedure setfields(const values:array of const);这个过程用values参数指定的值来对当前记录的字段赋值。如果数组的元素个数比字段个数少,则多余字段的值将为NULL。要使某个字段的值不变,可以用NULL区赋值。在调用这个过程之前,先要调用EDIT()来使数据集处于dsedit状态。在调用这个过程后,还要调用post()把修改后的记录写到数据库中。Tdataset的事件很大一部分是在一个过程的之前之后成对出现的,比如aftercancel和beforecancel事件,afterclose和beforeclose事件,由于它们意义很明确,一目了然,我们就不一一列举,仅以aftercancel和beforecancel事件为例,其他以此类推。50、aftercancel事件声明:property aftercancel:tdatasetnotifyevent;其中,tdatasetnotifyevent是这样声明的:tdatasetnotifyevent=procedure(dataset:tdataset) ofobject;调用cancel()从而使所做的修改被取消后,将触发这个事件。如果数据集当前不处于dsedit状态或者没有未决的修改,则不会触发这个事件。51、oncalcfields事件声明:property oncalcfields:tdatasetnotifyevent;当计算字段的值被重新计算时,将触发这个事件。如果autocalcfields特性设为true,当非计算字段的值发生变化时,也能触发这个事件。这个事件发生后,数据集处于dscalcfields状态。这时,不能修改任何非计算字段的值,但可以修改计算字段的值。这个事件可能频繁发生。因此,处理这个事件的句柄应当尽可能简单,尤其是不能在事件句柄中修改非计算字段的值,否则,将导致无限循环。52、ondeleteerror事件声明:property ondeleteerror:tdataseterrorevent;其中,tdataseterror

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论