《Delphi程序设计教程 教学课件 ppt 作者 吕新平 冯祖洪 张强华 第九章》由会员分享,可在线阅读,更多相关《Delphi程序设计教程 教学课件 ppt 作者 吕新平 冯祖洪 张强华 第九章(98页珍藏版)》请在金锄头文库上搜索。
1、第9章 数据库应用程序,9.1 Delphi的数据库访问机制 9.2 数据库程序向导 9.3 数据库资源管理器 9.4 常用的数据库控制组件 9.5 Database Desktop的使用,退出,9.1 Delphi的数据库访问机制,9.1.1 数据库的基本概念 所谓数据库(database)是指一些表格(table)的集合,而表格是由一组相关联的记录(record)组成的。一个记录有许多的属性(attribute)组成,其中的一个属性可用来区分不同的记录,这个属性就是关键值(key)属性。,在微机中,通常一个文件就是一个表格,如在xBASE中的一个表格就是一个.DBF文件。因此,在xBASE
2、中,数据库是指一些小型的数据库系统,也就是一个文件即为一个数据库(表格)的系统;而在SQL Server数据库系统中是指一个数据库中可以包含许多表格及其它对象的系统,功能大于xBASE数据库系统,如图9-1所示。,9.1.2 Borland数据库引擎(BDE) Borland数据库引擎(BDE)是32位的基于Windows的核心数据库引擎,是一个存取数据的中间层(middleware layer)。BDE对开发客户/服务器应用程序提供了丰富的支持。,1. BDE的体系结构 BDE数据库驱动程序体系结构包括许多共享的服务实用程序(数据库驱动程序和其它函数)。使用数据库驱动程序可一致地存取标准的数
3、据源:Paradox、dBASE及文本数据库。也可将Microsoft ODBC驱动程序作为内置的ODBC插槽。Borland的SQL Links产品提供对SQL Server广泛的存取,包括InterBase、Oracle及Sybase。因此,编程者可以直接、明了、共享地存取多个数据源。 2. 面向对象 BDE在设计时是面向对象的,在运行时,应用程序可以建立各种BDE对象。这些运行时的对象可用来维护数据库实体:像数据表等。,3. Delphi数据库结构 Delphi数据库控制组件包括两类: 数据存取控制组件:负责连接数据库本身,不包含数据的显示与输入 数据显示控制组件:提供建立用户界面的基本
4、组件,用于显示与输入数据,所有的数据控制组件都是通过存取数据的中间层BDE,对数据进行存取的。所有的Borland数据库产品,除Paradox for DOS及dBASE for DOS外,都是以BDE为中间层的。这样可以保证共享数据库中的数据、方便数据的存取、允许对不同平台上的不同数据库进行操作、便于移植程序。 Borland数据库引擎中引入了“数据来源”(Data source)的概念。其作用是在数据存取组件与数据显示组件之间的一个中介,从而可以在程序执行时将数据存取组件与数据显示组件独立分开操作、切换。如图9-2所示。,在理解了BDE与数据来源的概念后,就可通过图9-3来理解Delphi
5、的数据库结构。,9.2 数据库程序向导,最容易产生数据库程序的工具就是使用数据库窗体向导(Database Form Wizard)。数据库窗体向导可以建立两类的数据库程序: 简单的数据库程序 主/明细数据库程序,数据库窗体向导可以将窗体与Table及Query组件连接起来;编写Query组件的SQL语句;将交互的与非交互的组件添加到窗体上;定义Tab键顺序;将DataSource组件与交互组件及Table/Query组件连接起来。 启动数据库窗体向导使用Database|Form Wizard命令。启动后的画面如图9-4所示。,根据数据库程序向导,设定一些信息:建立简单的表格窗口还是两种以上
6、的主/明细表格窗口;做数据输入的表格窗口还是查询的表格窗口;选择数据库及显示的数据库字段,最后数据库窗体向导就会自动生成数据库程序的窗体,并产生相应的应用程序。如图9-5所示。,9.3 数据库资源管理器,数据库资源管理器可以显示数据库、数据表及字段的层次图,以便浏览和修改数据对象的结构和内容。 启动数据库资源管理器,使用的命令为Database| Explorer,数据库资源管理器启动后的画面如图9-8所示。,数据库资源管理器的左边为一个对象浏览器,用来显示数据库或数据路径对象的层次图;右边用来显示左边中选定对象的相关内容,包括对象的定义、对象概要、数据等,还可以使用SQL语句进行查询。 将数
7、据库资源管理器中的对象Table或Field拖动到集成开发环境的窗体中,就可自动创立相应窗体的对象。如将一数据表拖动到窗体时,可以生成已相关联好Table、DataSource、DBGrid等组件。,9.4 常用的数据库控制组件,9.4.1 Table组件 Table组件在BDE页标签上。 Table组件通过Borland数据库引擎(BDE)实现对数据库表格的存取。它是数据库引擎与DataSource组件的界面。,DatabaseName属性可以指定要存取的数据库;TableName属性指定要存取的数据表;设置ReadOnly属性为True,则只能查看数据表的内容;设置Exclusive属性为
8、True,则以独占方式打开数据表;若要与索引文件一同使用数据表,使用 IndexName属性;使用MasterFields和MasterSource属性建立对主数据表的连接。调用GotoCurrent方法将光标移动到与该数据表相同数据库中的另一数据表table中相同位置。,设置属性Active为True或调用Open方法,以浏览方式打开数据表;设置Active属性为False或调用Close方法可关闭数据表;调用First、Next、Prior、Last及MoveBy方法在数据表中移动;调用SetKey、FindKey、FindNearest、GotoKey和、GotoNearest 方法进行
9、数据库查找。 BOF及EOF属性,用来确定光标是否到达数据表开始及结束;调用Append、Insert、AppendRecord或InsertRecord方法可增加记录;调用Delete方法可删除当前的记录;调用Edit方法,允许应用程序修改数据表中的记录、Post将变化送到数据库中、Cancel则放弃修改。,使用EditRangeStart、EditRangeEnd、SetRangeStart、SetRangeEnd、ApplyRange及SetRange方法可以限制返回到应用程序的记录范围,而调用CancelRange方法则取消这些限制。 1. Table组件的属性 Active属性 该属
10、性为布尔型。设置为True,则以浏览方式打开数据库;设置为False,则关闭数据库。改变Active属性的值与调用Open或Close方法是等同的。, AutoCalcFields属性 该属性为布尔型,它确定何时调用OnCalcFields事件来更新计算字段的值。若AutoCalcFields设置为True,则自动更新计算字段的值,默认为False。 CachedUpdates属性 该属性为布尔型,表示是否可更新缓存。若可更新缓存,则使用缓存替代写到数据集中。可以调用ApplyUpdates方法应用于所有更新。在更新缓存期间,设置CachedUpdates为False将放弃更新。, Datab
11、aseName属性 DatabaseName属性指定要存取的数据库。可指定: 定义的BDE别名 桌面数据库文件的路径名 本地InterBase服务器数据库的路径及文件 由Database组件定义的应用程序特殊别名 在改变DatabaseName属性前,使用Close方法关闭数据集。, Exclusive属性 该属性为布尔型(对Paradox或dBASE数据库有效),设置为True时,可以防止其它用户存取该数据表(独占方式使用)。若在你打开数据表时,其他的用户正在存取该数据表,则意外处理程序将等待这些用户释放要打开的数据表。若应用程序中没有提供意外处理程序时,则终止应用程序的运行。 在改变Exc
12、lusive属性前,设置Active属性为False,以防止出现意外。 不要在对象编辑器中设置Active和Exclusive属性为True。, Filter属性 该属性为字符串型,可用来指定要在数据集中查看的记录。筛选与查询(queries)是类似的,但功能低于后者。改变Filtered属性可以开关Filter属性。 筛选字符串的语法与SQL语句中WHERE子句的语法是非常类似的。 Filtered属性 该属性为布尔型,用来关闭由Filter属性和OnFilterRecord事件提供的筛选。若设置为True,则符合筛选条件的记录出现;若设置为False,则数据集中的所有记录是可见的(除去以独
13、占方式使用的记录)。, FilterOptions属性 FilterOptions 可用来更好地调整由Filter属性提供的筛选,如是否区分大小写等。 IndexFieldNames属性 该属性为字符串型,用于SQL服务器中指定该组件的索引列。索引列之间用“;”分开,若列名太多或名字太长(超过255个字符的限制),可使用列号代替列名。 注意:IndexFieldNames属性与IndexName属性是互斥的,设置一个将清除另一个。, IndexFiles属性 IndexFiles属性为包含dBASE数据表索引的文件名。使用TStrings的Add、Insert、Delete, 和Clear方法
14、可以添加、插入、删除及清除索引文件名。 在索引打开时,更新可维护索引。设置IndexName属性可以激活一个索引。调用Delete或Clear方法删除索引文件名时,该组件将关闭这些索引文件,并不再保持更新。 IndexName属性 该属性为字符串型,用来对该组件指定辅助索引。若没有给IndexName属性赋值,则使用数据表的主索引。 对dBASE数据库,索引必须在数据表的主索引文件中。主索引文件是由TableName属性确定的,其后缀为.MDX。, MasterFields属性 该属性为字符串型,用来指定由MasterSource属性确定的主数据表与明细数据表连接的字段。该属性中可包含一个或多
15、个两个要连接的数据表字段名,字段名之间用字段号分开。每次主数据表中的当前记录发生变化,这些字段中的值相对于明细数据表中用于显示的记录就被选定。在设计时,使用字段连接设计器来设置该属性。 MasterSource属性 当将明细数据表与主数据表连接时,使用该属性指定DataSource(该组件将从主数据表获取数据的数据源)。, ReadOnly属性 该属性为布尔型,用于防止用户修改数据表中的数据。 注意:在修改ReadOnly属性前,设置Active属性为False。 SessionName属性 该属性为字符串型,用来唯一地识别该数据集要使用的会话组件。支持的SessionName必须与一些建立的
16、Session组件的SessionName或空的字符串(默认的会话)相匹配。在需要时,数据集打开会话,自动获得所有设置会话的属性。, TableName属性 TableName属性为该组件连接的数据库表的名称。 注意:要改变该属性必须关闭该组件。 TableType属性 TableType属性指定数据库表的类型。对SQL表不适用。 若TableType属性设置为Default,则文件名的后缀确定数据表的类型: .DB或没有后缀:Paradox数据表 .DBF:dBASE数据表 .TXT:ASCII数据表,若TableType的值不是Default,则数据表总是具有该属性指定的类型,与文件的后缀无关: ttASCII:文本文件 ttDBase:dBASE数据表 ttFoxPro:FoxPro数据表 ttParadox:Paradox数据表, UpdateMode属性 UpdateMode属性确定在SQL数据库更新记录时,Delphi如何查找记录。该属性对于多用户环境是相当重要的(可避免冲突)。 当用户要更新时,Delph