您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 《数据库应用技术――Delphi应用系统开发》-第五章
第5章连接数据库本章学习要点l理解Delphi的数据集控件的基本概念和术语l了解Delphi数据集的基本属性和方法l学习Delphi数据集的浏览l掌握Delphi基于ADO的数据库连接方法2020/2/925.1数据集控件在Delphi中访问数据的基本单元是数据集对象,数据集是以行和列的形式组织起来的数据的集合;其中,每一列具有相同的数据类型,而每行是由各列指定类型的数据组成的。为了更好地理解数据集的概念,现将几个与数据集相关的概念和术语说明如下:数据集一个分离的数据记录的集合。其中,每个记录包含多个字段。各个字段可以是不同数据类型(如整数、字符串、十进制数和图像等)的数据。数据集由VCL的TDataSet表示。表一种特殊类型的数据集。表一般是一个实际存储在磁盘上、包含有数据记录的文件。VCL的TTable类中封装了它的各种功能。查询也是一种特殊类型的数据集。它可以被看作是执行了特殊命令后所产生的“内存表”,这些命令一般是对物理表或表集的操作。在VCL中由TQuery类来处理查询。2020/2/93数据库:指磁盘中的一个目录(在处理如Paradox、dBASES文件这样的非服务器数据的情况下),或是一个SQL数据库(当使用SQL服务器时)。在一个数据库中可以包含多个表。在VCL有一个TDataBase类。索引用于数据库表排序的规则。所谓基于特定字段建立索引是指利用该字段的值作为表的排序依据。在TTable中包含了一些对索引进行操作的方法和属性。如果应用程序没有使用了TDatabase控件,则系统根据数据集控件DatabaseName属性创建一个临时的数据库。它们按照用途可分为三类:图5-1数据集控件之间的继承关系TDecisionqueryTADOCommandTADODataSetTADOTableTADOQueryTADOStoredProcTADOConnectionTCustomADODataetTNestedTableTTableTQueryTStoredProcTDBDataSetTBDEDataSetTClientDataSetTDataSet2020/2/94第一类是用于BDE体系结构的数据集控件,包括TNestedTable、TTable、TQuery、TStoredProc,以及用于数据库决策的TDecisionquery控件;第二类是ADO体系结构的数据集控件,包括TADODataSet、TADOTable、TADOQuery和TADOStoredProc;第三类是平面文件体系结构的客户端数据集控件,包括TClientDataSet。数据集控件之间的继承关系如图5-1所示。5.1.1数据集的属性数据集的属性很多,最常用的有状态(State)属性、书签(Bookmark)属性和过滤方面的属性(例如FilterOptions、Filtered和Filter等)。下面将介绍它们的含义和用法。2020/2/951.状态属性有时候,需要知道一个数据库表当前为编辑模式还是添加模式,或是否处于活动状态,这些信息都可以通过查看TDataSet的State属性来获取。State属性的类型为TDataSetState,该类型的取值可以是表5-1中所列的任意一种。表5-1数据集的的属性取值及含义2020/2/96属性值状态关闭状态含义dsInactive关闭状态数据集已关闭,不能访问它的数据dsBrowse浏览状态数据集已打开,可以浏览数据但不能修改数据dsEdit编辑状态此时为编辑状态,可以修改数据dsInsert插入状态此时可以插入一条新的记录dsSetKey键标状态只适用于TTable和TclientDataSet。数据集已打开,可以设置范围和键值,并且可以调用GotoKey方法dsCalcFields计算字段状态数据集正在处理OnCalcFileds事件,此时不能修改非计算字段的值dsCurValue现值状态内部使用dsNewValue新值状态内部使用dsOldValue旧值状态内部使用dsFilter过滤状态数据集正在进行过滤操作dsBlockRead成批录入状态当一次有多个数据记录被读入内存时进入此状态,此时数据控件不能更新,事件也不能触发dsInternalCalc内部计算状态数据集正对记录中的计算结果处理OnCalcFields事件,此状态只适用于客户端数据dsOpening正在打开状态数据集正处在打开过程且没有结束,当数据集进行异步数据读取时进入此状态2020/2/97数据集的State属性是只读属性,在程序中可以读取State属性值,但不能设置State属性。当一个应用程序打开一个数据集的时候,数据集的State属性默认地被设为dsBrowse,及数据集处于浏览状态。要使数据集进入其它的状态,就要调用相应的方法。2.书签属性书签就是在数据集的某个位置做的一个标记,它的作用是以后可以快速方便地回到书签的所在位置。数据集提供了许多的属性和方法用于管理书签。数据集的Bookmark属性值代表的是当前记录的书签,可以通过设置Bookmark属性值来指定当前书签。FreeBookmark:删除一个书签。当书签不用的时候,调用FreeBookmark方法删除分配给某个书签的资源。2020/2/983.过滤属性一个数据库应用程序往往只对数据集的部分记录感兴趣,例如,可能只需要对一个学生成绩表中成绩高于90分的学生感兴趣。这种情况下,可以用过滤技术把符合特定条件的记录过滤出来。不过,对于一个字段很多的数据集或者过滤条件较为复杂来说,最好还是使用查询控件来进行过滤。要对数据集进行过滤,一般需要以下3个步骤:①首先要指定过滤条件:②然后设置FilterOptions属性的有关选项。根据具体需要而定,也可以没有;③最后把Filtered属性设为True。以后如果不要进行过滤,只要把Filtered属性设为False即可。(1)设置过滤条件与OnFilterRecord事件指定过滤条件有两种方式:一是设置Filter属性;二是在处理OnFilterRecord事件的句柄中给出过滤条件。2020/2/99Dataset1.Filter:='State=MA';也可以让用户来动态地指定过滤条件,如:Dataset1.Filter:=Edit1.Text;甚至还可以把上述两行代码结合起来:Dataset1.Filter:='State='+Edit1.Text;设置了过滤条件后,只要把Filtered属性设为True,过滤即有效。(2)设置过滤选项FilterOptions属性用于设置过滤的选项。这个属性是一个集合,可以是空集(默认),也可以取如表5-2所示的值。表5-2FilterOptions的取值及含义取值含义foCaseInsensitive比较字符串时忽略大小写foPartialCompare对于字符串类型的字段必须全部匹配,不允许部分匹配2020/2/9105.1.2数据集的操作对数据集的操作有很多,下面介绍一些常用的操作,如打开与关闭数据集、浏览记录、查询记录、搜索特定记录、修改记录、插入新记录、删除记录等。1.开关数据集在对数据集进行任何操作之前,必须首先将数据集打开。要打开数据集,可以把Active属性设为True即可,例如:MyTable.Active:=True;注意:在结束对数据集的操作以后,或者是要改变数据集的一些其它的属性,比如修改TTable的TableName前,需要关闭数据集。关闭数据集有两种方法:①将数据集的Active属性设为False,例如:MyTable.Active:=False;②调用数据集的Close方法,例如:MyTable.Close;2.浏览记录数据集提供的浏览数据的方法或属性如表5-3所示。表5-3数据集浏览记录的方法和属性2020/2/911方法或属性功能First方法使第一条记录成为当前记录Last方法使最后一条记录成为当前记录Next方法使下一条记录成为当前记录Prior方法使前一条记录成为当前记录MoveBy方法使距离当前记录若干行的记录成为当前记录Bof属性(只读)如果这个属性返回True,表示现在已到了数据集的开始位置Eof属性(只读)如裹这个属性返回True,表示现在已到了数据集的末尾位置2020/2/912(5)MoveBy方法调用数据集的MoveBy方法使数据集中的另一条相隔指定距离的记录成为当前记录。MoveBy方法需要传递一个参数,指定相隔的行数,正数表示向记录编号增大的方向移动,负数表示向记录编号减小的方向移动。程序代码如下:MyTable.MoveBy(8);(6)Eof属性Eof是数据集的只读属性。用于判断当前记录是否到了数据集的末尾。如果Eof属性值为True,表示现在已到了数据集的最后一条记录。在遍历数据集的记录时一般需要用到Eof属性。进行下列任何一个操作,都将会把Eof属性设为True。打开一个空的数据集;调用了Last;调用了Next,而现在已经在数据集的最后一条记录;调用了SetRange,而范围是无效的。在其它情况下,Eof属性都将返回False。在调用数据集的Next方法的循环中,通常要读取EOf属性,以此来判断当前记录是否已处于数据集的最后一条记录,以避免对不存在的记录进行操作。程序代码如下2020/2/913MyTable.DisableControls;TryMyTable.First;WhilenotMyTable.EOFDOBegin…MyTable.Next;End;MyTable.EnableControls;End;出现异常,也能保证刷新能得到恢复。(7)Bof属性Bof也是数据集的只读属性,它的作用和Eof恰好相反。Bof属性用于判断当前记录是否是数据集的第一条记录。如果Bof属性返回True,表示现在已到了数据集的第一条记录。在遍历数据集的记录时一般也需要用到Bof属性。进行下列任何一个操作,都将会把Bof属性设为True。打开一个非空的数据集。2020/2/914调用了First;调用了Prior,而现在已经在数据集的第一条记录;在其它情况下,Bof属性都将返回False。程序代码如下:MyTabte.DisableControls;TryWhilenotMyTable.BOFDOBegin…MyTable.Prior;End;FinallyMymable.EnableControls;End;3.编辑数据要编辑数据集的记录,首先要调用Edit方法进入编辑状态,此时数据集的State属性值将为dsEdit。2020/2/915注意:如果使用缓存更新技术的话,也就是数据集的CachedUpdates属性值为True时,调用数据集的Post方法只是将修改的数据写到缓存中,并不是直接写到数据集中。这时,需要调用ApplyUpdates方法才能将数据写到数据集中。如果要取消当前所做的修改,可以按键盘上的Esc键或单击TDBNavigator控件上的Cancel按钮。4.插入记录要在数据集中插入新的记录,首先要调用Insert或Append方法进入插入状态,此时数据集的State属性值为dslnsert。同样,调用Insert或Append方法并不一定会使数据集进入插入状态,还要取决于CanModify属性的值。一旦进入了插入状态,用户就可以在数据控件中插入一条新的记录,并输入相应的数据。2020/2/9165.删除记录调用数据集的Delete方法将删除当前记录,并且使数据集回到浏览状态,也就是说,数据集的State属性值将为dsBrowse。当前记录被删除后,下一条记录就成为当前记录。如果删除的本来就是最后一条记录,则前一条记录就成为当前记录。6.修改记录除了TDBGrid和TDBNavig
本文标题:《数据库应用技术――Delphi应用系统开发》-第五章
链接地址:https://www.777doc.com/doc-3589842 .html