第13章-BDE数据库应用程序开发ppt课件(全).ppt
《第13章-BDE数据库应用程序开发ppt课件(全).ppt》由会员分享,可在线阅读,更多相关《第13章-BDE数据库应用程序开发ppt课件(全).ppt(151页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第13章BDE数据库应用程序开发13.1TTable组件13.1.1TTable组件的常用属性13.1.2TTable组件的常用方法13.1.3TTable组件的常用事件13.2数据源TDataSource组件13.2.1DataSource组件的常用属性13.2.2DataSource组件的事件13.3数据控制类组件13.3.1数据控制类组件的共同特性13.3.2常用数据控制类组件功能简介13.4Query组件13.4.1Query组件的常用属性13.4.2Query组件的常用方法13.4.3静态查询使用字符连接号“+”实现动态查询使用Params属性实现参数查询使用ParamByName方
2、法实现动态查询13.5使用BDE开发数据库应用程序13.5.1创建数据库表13.5.2制作应用程序界面13.5.3编写代码13.6小结13.7习题Dephi具备强大的数据库应用开发能力,支持多种数据库访问机制。其中一种就是基于BDE的数据库应用开发。BDE(BorlandDataBaseEngine)是Borland公司为其开发工具研发的一种可以被多个应用程序共享的数据访问机制。它封装了强大的数据库操作API,可以对本地数据库或远程数据库轻松实现诸如创建、修改数据库结构、数据存取、更新等操作。通过数据库驱动与数据库进行连接,使BDE能为多种类型的数据库服务器提供统一的访问接口。根据Delphi
3、版本不同,可以访问Paradox、dBASE、FoxPro、Access等类型的本地数据库,同时通过ODBC来访问所拥有的可用ODBC数据源。明显地,在发布基于BDE的数据库应用程序的时候,必须包含一份BDE的拷贝。这样会增加应用程序的体积和程序布署的复杂程度。尽管在应用程序中可以直接通过BDE的API进行数据库操作,但Delphi在组件面板的BDE页上提供的组件封装了其中大部分的功能,使用它们无疑可以使开发工作变得更加简单、高效。利用BDE开发数据库应用程序一般涉及到三类组件:BDE组件、DataAccess组件和DataControls组件。这些组件的关系如图13-1所示。图13-1利用B
4、ED组件访问数据库这三类组件分别分布在Delphi2005的ToolPalettek的BDE页、DataAccess页和DataControls页,如图13-2、13-3、13-4。图13-2BDE组件图13-3数据访问组件图13-4数据控制组件13.1TTable组件TTable组件通过BDE直接访问数据库表中的每一条记录和所有字段。它是最重要的数据集部件之一,使用频率非常高。这里主要介绍其主要的属性、方法和事件,更详细的内容请查阅Delphi的联机帮助文档或相关资料。13.1.1TTable组件的常用属性1DatabaseName属性该属性指定Table组件要访问的数据库的名字。可以是一个
5、BDEAdministrator中定义的数据库别名、一个数据库文件的磁盘路径或者是一个由TDataBase部件连接的数据库。通常使用的是数据库别名,好处是应用程序不用关心数据库文件实际存储的位置。如果数据库文件的存储位置发生改变,只需要在BDEAdministrator中修改别名指向的路径信息即可。2TabelName属性该属性指定Table组件要访问数据库中具体的数据表名称。它可以是一个数据表名,也可以是数据表文件的文件名(包括完整的路径)。同理,通常应该使用数据表的名称。如果在设计期先设置DateBaseName属性,指定数据库别名,然后就可以通过对象监视器在数据表名的下拉列表中选择要访问
6、的数据表。需要注意的是,修改这两个属性,数据集都必须处于关闭状态,即Active属性为False。3TableType属性该属性指定与TTable部件相连接的数据库表的类型。其可能的取值及意义如表13-1:表13-1数据库表类型取值及意义如果TableType属性取值为ttDefault时,表示数据库表的类型由数据库文件的扩展名决定。具体情况为:如果数据库文件的扩展名为.DB或没有扩展名,表的类型是Paradox表;如果数据库文件的扩展名为.DBF时,表的类型是dBASE表;如果数据库文件的扩展名为.TXT时,表的类型是文本数据库表。注意,该属性不适用于连接远程SQL数据库服务器中表的时候。4
7、Active属性该属性为Boolean类型,通过该属性可以判断或指定是否打开数据集。如果该属性为False,表示数据库被关闭,此时数据集不能存取数据,而数据感知组件也不能进行数据读取和邮寄修改结果的操作。当将该属性值设置为True时,将执行下列操作:触发BeforeOpen事件将数据集设为dsBrowse(浏览)状态制定数据访问方法(通常是建立游标)触发AfterOpen事件当将该属性值设置为False时,将执行下列操作:触发BeforeClose事件把State属性设置为dsInactive(关闭)状态关闭游标触发AfterClose事件设计期可以在对象监视器里修改该属性值,运行时则可以通过
8、给属性赋值或调用相应方法实现该属性值的修改,例如:语句:Table1.active:=true;等价于Table1.open;Table1.active:=false等价于Table1.close;5Exclusive属性该属性是Boolean,用来指定是否以共享方式打开数据库表。如果值为True,当打开一个数据库表时,其他用户就不能访问该表了,如果表已经被期它用户使用,则会产生一个异常;若Exclusive的值为False,将以共享方式打开一个数据库表。显然不能将其他用户正在访问的表以互斥方式打开(设定Exclusive的值为True)。对于SQL数据库服务器上的数据库表,当以互斥方式被一个
9、用户打开时,其他用户可以读取该表中的数据,但不能修改表中的数据,当然有些数据库服务器不支持这种方式,这要具体参看有关的数据库服务器的文档。在改变该属性值前,数据集必需先关闭。在设计期,如果已经设置Active属性为True,就不要把该属性也设置为True。因为IDE已经打开了指定的表,这样的话会产生一个异常。6ReadOnly属性该属性决定用户是否能够对表中的数据进行读写。值为True时,用户只能读取表中的数据,值为False时,用户可以读写表中的数据(前提是用户有读写数据库表的权限)。7CanModify属性该属性是一个只读属性,用户不能够修改其属性值,它由应用程序打开一张表时自动设置,反映
10、用户对数据库表拥有的实际特权。当ReadOnly属性值为True时,该属性将自动地被设为False,当ReadOnly属性值为False时,若用户对数据库表有读写权限时,该属性值为True,否则该属性值为False。当该属性值为False时,数据库表是只读的,不能将数据集置为编辑或插入状态;当该属性为True时,虽然数据库表对应的数据集部件可以置成编辑和插入状态,但是用户不一定能够更新表中的数据,因为这还要受到其他因素的限制,如用户对数据库服务器的访问权限等。8IndexFields属性IndexFields的属性值是一个下标从0开始的数据库表中字段名的数组,它包含与TTable组件相连的数据
11、库表中的全部索引字段。IndexFieldsCount属性说明表中索引字段的个数。这两个属性值都是只读的,只有在程序运行过程中可用。运行期应该使用IndexFieldsName属性来对数据集进行排序,而不要直接设置IndexFields属性的值。9IndexName属性和IndexFieldNames属性IndexName该属性是一个只读的辅助索引名列表,存放建立数据库表时定义的所有辅助索引名。IndexFieldNames属性指定数据库表用来排序的索引字段名,多个字段名之间用分号隔开。字段必须存在于相应的数据库表中,否则会导致错误。这两个属性是互斥的,设置其中一个,会自动清除另一个。10.K
12、eyExclusive属性该属性是布尔型变量,默认值为False。它的作用是在表中指定检索范围时,用来指定是否包括满足过滤条件的边界记录。当值为False时,检索范围包括边界记录,否则不包括边界记录。11State属性该属性标明数据集所处的工作模式,即确定可以对数据做哪些操作。其可能的取值及意义如表13-2:表13-2数据表工作模式取值及意义数据集的状态在应用程序处理数据的过程中不断的变化着。当数据集被打开时,状态由dsInactive改为dsBrowse。程序可以调用Edit、Insert方法将数据集置为dsEdit、dsInsert状态。如果是TTable或TClientDataSet部件
13、,还可以调用SetKey方法或SetRange方法将数据集置为dsSetKey状态。邮寄或撤消地数据的修改将把数据集由当前状态置为dsBrowse状态。关闭数据集则将数据集由当前状态置为dsInactive状态。12.Filter属性和Filtered属性在访问一个数据集时,当只需要浏览符合特定条件的记录而不是全部记录时,可以通过设置数据集组件的Filter属性很方便的实现。Filter属性可以用一个字符串描述为数据集设定的过滤条件。程序运行时,所访问的数据集中,只有符合该过滤条件的记录才会返回给数据集组件。比如,如下的过滤属性设置使数据集只返回state字段是CA或MA的记录:State=C
14、AorState=MA;过滤条件的设置支持通配符,比如:State=M*表示以“M”开头的所有取值。如果用来设置过滤条件的字段名中有空格,则需要用一对“”符号将该字段名括直来,比如:SpeciesName=Gymnothoraxmordax。过滤属性的设置可以有多种方式,例如:Dataset1.Filter:=State=+QuotedStr(CA);/固定字符串方式;Dataset1.Filter:=Edit1.Text;/由用户输入;Dataset1.Filter:=State=+QuotedStr(Edit1.Text);/部分由用户输入;Dataset1.Filter:=StateCA
15、orState=BLANK;/复杂条件表达式;在条件表达式中可使用的操作符有如下几个:、=、=、=、AND、NOT、OR、+、-、*、/、*(通配符)Filtered属性为Boolean,用来指定Filter属性设置的过滤条件是否有效。因此,在设置完Filter属性后,还必须设置Filtered属性为True,才能真正的实现对记录的过滤。13.Bof属性和Eof属性这两个属性都是Boolean类型,分别用来测试记录指针(即当前记录)是否处于表的开头(第一条记录)和结尾(最后一条记录),如果是,则返回True。Bof(Beginningoffile)属性在下列情况下返回True,其它情况下均返回
16、False:打开数据集。调用数据集组件的First方法。记录指针指向第一条记录时调用数据集组件的Prior方法。对一个空数据集或数据集使用范围调用SetRange方法。相应的,Eof(end-of-file)属性在下列情况下返回True,其它情况下返回False:打开空数据集。调用数据集组件的Last方法。记录指针指向最后一条记录时调用数据集组件的Next方法。对一个空数据集或数据集使用范围调用SetRange方法。明显地,如果Bof和Eof属性都返回True,则该数据集或使用范围为空。14.RecordCount属性。该属性为LongInt类型,用于返回数据集总的记录条数。利用它和RecNo
17、属性配合,可以代替First、Last、MoveBy、Prior等方法实现对数据集所有记录的遍历操作。但是在程序中应该谨慎使用该属性,因为该操作代价很大,影响程序性能,特别是在SQL查询结果返回大量记录的时候。因此通常只对Paradox和dBASE表使用该属性。另外,如果数据集不是Paradox类型并且有过滤条件在起作用或者是设置了使用范围,则该属性返回值可能仅是一个近似值。15.FieldValues属性在程序中,可以通过FieldValues属性访问数据集当前记录的各个字段值。该属性的定义如下:propertyFieldValuesconstFieldName:string:Variant
18、;default;其中的FieldName是要访问的字段名。该参数可以是单个字段名,也可以是多个字段名或字段对象的集合。因为这种灵活性,通常在程序,采用该属性或FieldByName方法比采用Fields、Fieldist等属性访问字段值要更好一些。另外,该属性为了能处理各种数据类型的字段使用的是可变类型值,这样在处理速度上会比使用字段原本的数据类型值要慢(比如使用字段对象的as*属性),特别是有大量数据需要处理时更是如此。该属性使用示例如下,代码功能是向数据集中添加一条记录:SampleTable.Append;SampleTable.FieldValuesALPHANUMERIC:=Edi
19、t1.text;SampleTable.FieldValuesINTEGER:=StrToInt(Edit2.text);SampleTable.Post;TTable部件中MasterSource属性和MasterFields属性是用于定义主-从关系表的。MasterSource属性指定主表对应的TDataSource部件,MasterFields属性指定主表和明细表之间建立联系的字段。主表和明细表建立一对多关系时,如果是多个字段要用分号隔开。在设计阶段可以使用字段连接设计器(FieldLinkDesigner)为两上表创建一对多的关系。13.1.2TTable组件的常用方法1.设定数据库表
20、的使用范围应用程序可能只需对表中一部分记录进行操作,此时应为应用程序指定一个使用表中记录的范围。为此,TTable组件提供了下列方法供用户使用:SetRangeStart和EditRangeStart方法SetRangeEnd和EditRangeEnd方法SetRange(StartValues,EndValues)方法ApplyRange方法CancelRange方法1)SetRangeStart方法用于指定检索范围的起始记录,调用SetRangeStart方法之后,可以为起始记录的一个或多个字段指定相应的字段值。SetRangeEnd方法用于指定检索范围的结束记录,调用SetRangeEn
21、d方法之后,可以为结束记录的一个或多个字段指定相应的字段值。2)SetRange方法包含了SetRangeStart和SetRangeEnd方法的功能,它可以同时指定检索范围的起始和结束记录,起始记录和结束记录的字段值以数组形式送给SetRange,其基本形式是:SetRange(起始值,结束值)3)ApplyRange方法根据SetRangeStart,SetRangeEnd或SetRange方法说明的检索范围的起始和结束记录,具体设定一个检索范围,调用ApplyRange方法之后,应用程序只能对检索范围内的记录进行有关的操作。4)CancelRange方法的作用与ApplyRange方法的
22、作用是相反的,这是取消为表设定的检索范围,调用CancelRange方法之后应用程序可以对表中全部记录进行有关的操作。注意:如果是paradox表或dBASE表,调用SetRangeStart,SetRangeEnd、SetRange时,只能为表中的索引字段或定义的索引指定相应的字段值,以设定检索范围。如果使用SQL数据库服务器中的数据库表,可以为IndexFieldNames属性中指定的字段指定相应的字段值。5)EditRangeStart和EditRangeEnd方法是用来设定一个可编辑的范围,其使用方法完全类似与SetRangeStart和SetRangeEnd。2.数据维护方法数据集中
23、的数据维护主要包括数据记录的修改,插入和删除。Delphi为数据集部件提供了相应的方法用于其中的数据维护。这里以TTable组件为例介绍这些方法。1)Edit方法:将数据集置为编辑状态。如果数据集为空,则调用Insert方法,否则执行以下动作:如果需要,投寄之前的记录的修改。检查CanModify属性,如果数据集不可编辑,则产生一个异常。调用BeforeEdit事件处理过程。检索记录。将数据集置为编辑状态,允许程序或用户编辑数据。向所关联的组件广播数据集的状态改变。调用AfterEdit事件处理过程。2)Append方法:向数据集的未尾新添加一条空记录,并将其置为当前记录。例如:SampleT
24、able.Append;SampleTable.FieldValuesALPHANUMERIC:=Edit1.text;SampleTable.FieldValuesINTEGER:=StrToInt(Edit2.text);SampleTable.Post;3)Insert方法:向数据集中新添加一条空记录,并将其置为当前记录。例如:table1.Insert;table1.FieldByName(QUANTITY).AsInteger:=StrToInt(Edit1.Text);table1.Post;这两个方法都将数据集置为插入状态,以在表中添加新记录。Insert方法是在当前指针位置的记
25、录后面插入一条新记录,Append方法是在表的最后插入一条新记录。然而,无论用户是调用Insert方法还是Append方法插入新记录,增加记录到一个具有索引的表中时,其写入位置都是按照索引顺序的,也就是说对于索引表格Insert方法和Append方法的作用是一样的。另外,Insert方法和Append方法实际上只插入一条空白记录,所以必须在调用Insert或Append方法之后,给新记录的各个字段赋值,最后调用post方法,将插入的记录写回数据库表。4)Post方法:将插入的新记录和修改的记录写回磁盘上的数据库表,即投寄。当投寄成功时数据集回到浏览状态,若投寄不成功数据集仍然保持原有状态。po
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13 BDE 数据库 应用程序 开发 ppt 课件
限制150内