第5章数据库应用程序开发_第1页
第5章数据库应用程序开发_第2页
第5章数据库应用程序开发_第3页
第5章数据库应用程序开发_第4页
第5章数据库应用程序开发_第5页
已阅读5页,还剩193页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5 5章章 数据库应用程序开发数据库应用程序开发 第第5章章 数据库应用程序开发数据库应用程序开发 5.1 BCB数据库技术概论数据库技术概论 5.2 数据库组件的连接数据库组件的连接 5.3 TDataSet类类 5.4 数据控制组件的使用数据控制组件的使用 5.5 TQuery组件的使用组件的使用 5.6 建立主表建立主表/细目表关系细目表关系 5.7 使用使用ADO技术技术 5.8 使用使用QuickReport创建报表创建报表 习题习题 第第5 5章章 数据库应用程序开发数据库应用程序开发 5.1 BCB数据库技术概论数据库技术概论 5.1.1 ODBC、BDE与ADO ODBC是

2、Microsoft公司Windows开放式体系结构的数据库部件,它是若干Windows API的标准命令或函数组,用户以统一的方式使用这些API来处理不同平台上的数据库信息。ODBC已成为数据库行业的标准,每个数据库管理系统的开发商都为自己的数据库产品编制了相应的ODBC,为数据库的二次开发带来了方便。第第5 5章章 数据库应用程序开发数据库应用程序开发 为了对包括Office文档、邮件、Web上的文本或图形等形式的数据提供统一的访问方法,Microsoft对ODBC进行扩充,推出了新的数据访问接口标准OLE DB。但ODBC和OLE DB使用起来都不太方便,因此Microsoft随后又对OL

3、E DB进行了包装,推出了一种面向对象且与语言无关的数据库应用编程接口,这就是ADO(ActiveX Data Objects)。第第5 5章章 数据库应用程序开发数据库应用程序开发 BCB支持从ODBC到ADO的各种流行的数据库标准。Borland数据库引擎称为BDE,它是访问各种数据库的DLL和实用程序的集合,用来访问符合ODBC标准的本地数据库和客户/服务器数据库。针对不同的数据库,BDE提供了一组驱动器,使应用程序能够在不知道数据库的具体工作细节情况下即可进行各种数据操作。不同版本的C+Builder所带的驱动器有所不同,但每个版本都有一个名为STANDARD的驱动器,提供本地数据库所

4、要的一切。而Client/Server版的C+Builder带有连接Sybase、Oracle、Informix、InterBase等数据库服务器的驱动器。第第5 5章章 数据库应用程序开发数据库应用程序开发 BCB对ADO的支持则是通过一组VCL的数据库组件来实现的。经过BCB包装的ADO组件,在使用中与BDE以及其它的VCL组件有很好的兼容性,使得用BCB开发的数据库程序具有极强的适应能力。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.1.2 数据库别名 BDE可以直接访问数据库,也可以通过别名访问数据库,前者较为直接,后者则较为正规,并且具有更多的功能和更好的兼容性。数据库别

5、名生成后就可以在C+Builder中使用。 本地数据库使用的别名通常比较简单,它告诉BDE使用哪种驱动器和数据库文件在磁盘上的位置。而客户/服务器数据库的别名则还包含其它信息,如打开方式、用户名和密码等。第第5 5章章 数据库应用程序开发数据库应用程序开发 BCB安装完成后,本地硬盘上已经设置了一个别名为“BCDEMOS”的数据库,该数据库内有许多表,我们经常在例题中使用该数据库别名。 下面介绍如何生成BDE的数据库别名。在Windows系统的控制面板中选取“BDE Administrator”图标,此时弹出BDE别名管理器,如图5-1所示。该窗口左下方Database页上列出了系统所有的可用

6、数据库的别名,打开其中的树型结点可以浏览更加详细的内容。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-1 BDE 管理器 第第5 5章章 数据库应用程序开发数据库应用程序开发 作为例子我们创建一个基于FOXPRO的BDE别名MYBDE,具体方法如下: (1) 在别名管理器的Database 页面上选择主菜单ObjectNew,或右击树型结构的任意地方,选择弹出菜单的New选项,弹出新别名对话框,如图5-2所示。在下拉列表框中选择“STANDARD”,此时生成一个缺省名为“STANDARD1”的别名。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-2 新建数据库别名第第

7、5 5章章 数据库应用程序开发数据库应用程序开发 (2) 将别名命名为“MYBDE”并回车,然后在该别名的设置中单击DEFAULT DRIVER的属性值,选取FOXPRO。 (3) 将别名的PATH设置为数据库所在的目录,如路径为 C:Program FilesBorlandBorland SharedData (4) 单击工具栏中的Apply按钮,即完成了别名的创建。 如果需要浏览数据库别名所指的数据库及其数据表,则单击别名前面的“+”,展开后再打开Tables节点,将出现该数据库所有可用的表,如图5-3所示。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-3 展开后的数据库浏览

8、器 第第5 5章章 数据库应用程序开发数据库应用程序开发 5.1.3 Database DeskTop Database DeskTop是Borland公司的一个小型数据库管理系统产品。C+Builder中可以使用Database DeskTop来创建、浏览和修改本地的Paradox和dBASE数据表。 执行ToolsDatabase DeskTop 菜单命令即可打开Database DeskTop。在Database DeskTop中可以打开子窗口对数据表进行创建、查询、执行SQL语句等操作。Database DeskTop子窗口主要有以下三种。第第5 5章章 数据库应用程序开发数据库应用程

9、序开发 1查询窗口 打开或建立新的QBE文件时,Database DeskTop将打开一个查询窗口,可以使用查询窗口检索表中的信息。 2SQL编辑器 当打开或创建SQL文件时,SQL编辑器窗口就会自动出现在主窗口上面。SQL编辑器除了具有文本编辑器的一般特征以外,还具有执行和保存SQL语句的功能。在执行时,由SQL服务器进行文法检查。 第第5 5章章 数据库应用程序开发数据库应用程序开发 3表窗口 当打开或建立新的Paradox、dBASE、SQL表时,会出现表窗口,利用表窗口可以输入或修改表的结构。 Database DeskTop支持Paradox、dBASE和SQL文件格式,在Datab

10、ase DeskTop中建立一个表的步骤如下: (1) 选择FileNewTable,或右击“Open Table”工具按钮选择“New”, Database Desktop将打开“Create Table”对话框,从下拉式列表框中选择“Paradox”(如果建立其它类型的数据表,也只要在这里作相应选择即可)。单击“OK”, Database DeskTop将打开创建数据表对话框。第第5 5章章 数据库应用程序开发数据库应用程序开发 (2) 在“Field Name”列输入字段名。移动光标到“Type”列,按下“空格”键或用鼠标右击“Type”列,从显示的数据类型列表中选择该字段的数据类型。在

11、“Size”列键入一个合适的字段宽度(如果需要的话)。 (3) 使用向下箭头,重复如上步骤,直到指定所需的所有字段。 (4) 可以双击某字段的“Key”列将该字段指定为一个键。Paradox表可以有一个或几个键,但必须是该表最前面的几个字段。被指定为Key的字段会被自动索引,并且系统会检查键值组合的惟一性(即不允许两条记录的所有键值都相同)。第第5 5章章 数据库应用程序开发数据库应用程序开发 (5) 表结构创建完成之后,选择“Save As”命令按钮为该表命名并保存。在Database DeskTop的表窗口中设计表的结构如图5-4所示。在Database DeskTop中可对数据表进行输入

12、或编辑,具体步骤如下: 执行FileOpen菜单命令打开数据表,执行TableEdit Data菜单命令进入编辑模式,在该模式下可输入或编辑数据。在编辑完一条记录并进入下一条记录的编辑后,Database DeskTop将自动保存刚才输入或编辑的记录。 如果要修改表的结构,则应在打开表窗口之后执行TableRestructure菜单命令。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-4 使用Database DeskTop设计表的结构第第5 5章章 数据库应用程序开发数据库应用程序开发 5.1.4 BCB 的数据库组件 BCB数据库组件分为两大类:非可视的数据访问组件和可视化的数

13、据控制组件。前者提供了取得数据的机制,它们位于组件面板的Data Access、BDE和ADO等页上;而后者主要用于浏览和编辑数据,它们位于Data Controls页上。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.2 数据库组件的连接数据库组件的连接 VCL的数据访问组件和数据控制控件之间通常使用DataSource来连接。下面这个简单的例子让我们对BCB使用组件连接数据库的技术有感性的认识。 【例5-1】 本例使用数据库组件连接位于本地的BCDEMOS数据库中的animals数据表进行浏览。具体制作步骤如下:第第5 5章章 数据库应用程序开发数据库应用程序开发 (1) 新建一

14、个项目,在主窗体上放一个TTable类组件Table1(位于BDE组件页)。将它的DatabaseName属性设置为BCDEMOS,它的TableName属性设置为animals.dbf。 (2) 在窗体上放置一个TDataSource类组件Database1(位于Data Access页),并在其属性Dataset的下拉框中选取Table1,实现数据源和数据集相联系。 (3) 将一个TDBGrid类控件(位于Data Controls页)放到窗体上,将其DataSource属性设置为DataSource1,使其与数据源相联系。第第5 5章章 数据库应用程序开发数据库应用程序开发 (4) 回到

15、Table1组件上,将其Active属性设置为true(缺省值为false),这样就打开了数据源,此时ANIMALS.DBF表中的数据立即显示在DBGrid1的栅格中(除BMP字段外)。可调整DBGrid控件的大小以便于浏览。 (5) 再将一个TDBImage类控件(位于Data Controls页)放置在窗体上,将其DataSource属性设置为DataSource1,DataField属性设置为BMP(animals表中的字段名,数据类型为图片),并调整该控件的尺寸和位置。第第5 5章章 数据库应用程序开发数据库应用程序开发 (6) 将一个TDBNavigator类控件(位于Data Co

16、ntrols页)放置在窗体上,将其DataSource属性设置为DataSource1。 至此,程序设计完毕。运行该程序,通过DBNavigator按钮可以实现添加和删除记录等功能,在DBImage中显示图片,如图5-5所示。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-5 简单的数据表浏览程序 第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3 TDataSet类类 TTable组件用于方便快捷地访问本地数据表,而处理SQL数据库服务器则通常使用TQuery组件,它们都是TDataSet的派生类。本节将对TDataSet类属性和方法的用法作一个较为详细的介绍,它们是B

17、CB数据库技术的重要基础。 第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.1 连接数据库 与连接数据集有关的属性和方法主要有下面两点。 1DatabaseName属性 DatabaseName属性用来指定当前使用的数据库。在程序的设计阶段,可在Object Inspector中进行设置,通常只要在如图5-6所示的组合框中选择一个已定义的数据库别名即可。此外,DatabaseName 也可以在程序运行时动态设置。如果没有设置过数据库别名,那么也可以对DatabaseName属性输入数据表文件所在目录的路径。例如,当数据表文件与应用程序项目在同一目录下时,只要对DatabaseNa

18、me属性输入“.”即可。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-6 选择数据库 第第5 5章章 数据库应用程序开发数据库应用程序开发 2TableName属性 TableName属性用来指定数据表的名称,在设置TableName的属性值之前,应该首先设置DatabaseName属性的值。如果DatabaseName属性的值是在设计阶段指定的,则可通过选择下拉列表框中有效表名来指定TableName。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.2 打开和关闭数据表 打开和关闭数据表的有关属性和方法主要有下面三点。 1Active属性 如果Active属性为t

19、rue,相当于调用Open方法打开数据集,使数据集处于Browse状态。如果设置为false,相当于调用Close方法关闭数据集。在程序的运行阶段,在设置DatabaseName 的值之前,必须首先将Active属性的值设置为false,然后可设置DatabaseName的值,最后再打开该数据集。第第5 5章章 数据库应用程序开发数据库应用程序开发 2Open方法 Open方法用于打开数据集,使它处于Browse状态,相当于把Active属性设置为true。 3Close方法 Close方法用于关闭数据集,使它处于非活动状态,相当于把Active属性设置为false。第第5 5章章 数据库应用

20、程序开发数据库应用程序开发 5.3.3 浏览记录 浏览记录的有关属性和方法主要有下面七点。 1Bof属性 Bof属性为只读。如果当前记录是数据集中的第一条记录,Bof属性返回true,否则返回false。当程序刚打开一个非空的数据集或调用了First过程时,Bof为true。 2Eof属性 Eof属性为只读。如果当前记录是数据集中的最后一条记录,Eof属性返回true,否则返回false。当程序打开一个空的数据集或调用了Last过程时,Eof为true。第第5 5章章 数据库应用程序开发数据库应用程序开发 3RecordCount属性 RecordCount只读属性返回数据集中的记录数。值得注

21、意的是:RecordCount属性返回的记录数与数据物理存储的记录数可能不同,因为有可能使用了过滤。 4First、Last、Next和Prior方法 First、Last、Next和Prior方法分别将数据集在过滤范围内的第一条记录、最后一条记录、下一条记录和上一条记录设置为当前记录。 5IsEmpty方法 如果数据集是空的,IsEmpty函数就返回true。第第5 5章章 数据库应用程序开发数据库应用程序开发 6MoveBy方法 MoveBy方法用于移动当前记录。例如,MoveBy(-2)将位于当前位置前面的第二条记录变成当前记录,MoveBy(3) 将位于当前位置后面的第三条记录变成当前

22、记录。 7Refresh方法 当使用数据控制控件如DBGrid显示数据时,可以调用Refresh方法刷新数据,使显示的数据总是数据集中最新的。当处于网络环境时,该方法尤其重要。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.4 编辑数据 编辑数据的有关属性和方法主要有下面六点。 1CanModify属性 CanModify属性仅可在运行期间使用,且为只读。如果CanModify属性为false,表示不能修改(可能是由于多用户操作时数据集已被其他用户加锁等原因)。不过即使CanModify属性返回true,也并不意味着数据集一定能修改,还要取决于其它因素。第第5 5章章 数据库应用

23、程序开发数据库应用程序开发 2Modified属性 Modified属性是运行期间只读的属性,如果返回true表示当前记录某个字段被修改了但还没有被写到数据集中,当程序调用Cancel或Post后,这个属性将变为false。 3Edit方法 调用Edit方法使数据集处于编辑状态。 4Insert方法 为了在表中插入一个记录,首先应将记录指针移到表内适当位置,接着用Insert方法建立一条空记录,然后填充记录的各字段,最后将记录写入数据库表中。第第5 5章章 数据库应用程序开发数据库应用程序开发 例如,下面的一段代码是调用Insert方法插入一条记录:void_fastcall TForm1:B

24、uttonInsertClick (TObject *Sender)Table1-First ( );Table1-MoveBy (5);Table1-Insert ( );Table1-FieldByName (Name)-Value = NoBody;Table1-FieldByName (Capital)-Value = NoWhere;Table1-FieldByName (Continent)-Value = Imagination;Table1-FieldByName (Area)-Value = 0;Table1-FieldByName (Population)-Value =

25、0;Table1-Post ( );第第5 5章章 数据库应用程序开发数据库应用程序开发 5Append方法Append方法的用法类似Insert,但总是将空记录插入到表的尾部。6Delete方法删除记录可采用Delete方法,程序示例如下:void_fastcall TForm1:ButtonDeleteClick(TObject *Sender) if (MessageDlg (确实要删除这条记录?, mtConfirmation, TMsgDlgButtons ()mbYesDelete ( );第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.5 访问字段 访问字段的有关属

26、性和方法主要有下面三点。 1FieldCount属性 FieldCount属性在运行期间为只读,返回数据集中字段(列)的个数。第第5 5章章 数据库应用程序开发数据库应用程序开发 2Fields属性 Fields属性是由数据集中所有字段构成的数组,每个数组元素都是一个TField对象。例如,以下代码将Tabel1数据表中所有字段的名称加入到一个列表框中显示: for (int i=0; iFieldCount; i+) ListBox1-Items-Add (Table1-Fieldsi-FieldName); 第第5 5章章 数据库应用程序开发数据库应用程序开发 3FieldByName方法

27、 FieldByName方法非常重要,主要用于通过字段名访问当前记录的某个字段,使用时应确保数据集中有这个字段,否则将触发一个异常。当不能确定数据集中是否含有某个字段时,可调用FindField方法进行检测。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.6 过滤操作 过滤数据集是常用的操作之一,主要适用于本地数据库。而客户/服务器数据库主要通过SQL查询来实现与本地数据库过滤相同的功能。 有时数据集中的记录较多,而其中有一些不是你所需要的部分,此时就可以进行过滤。比如存储学生信息的数据库表,其中包含学生的学号、姓名、性别、年龄、籍贯等信息,如果只需要女同学的信息,就可以按照性别

28、进行过滤,从而得到需要的信息。第第5 5章章 数据库应用程序开发数据库应用程序开发 Table组件可通过Filter属性进行过滤。可以在设计时在Object Inspector中输入Filter属性,也可以在程序运行时将字符串值赋给Table组件的Filter属性。 注意:仅当Filtered属性设置为true时过滤有效。 基本过滤语句的格式如下: FieldName ConstString; 其中,FieldName表示过滤的字段名,op是用于过滤条件的操作符,常见的操作符如表5-1所示,ConstString一般代表一个常量,如语句“性别=女”表示显示所有女同学的信息。第第5 5章章 数据

29、库应用程序开发数据库应用程序开发 其中的逻辑操作符用来连接多个基本过滤语句,例如:CITY=New York AND STATE=Ca;在过滤语句中,字段名和逻辑操作符一般与大小写无关。如果字段名内含有空格如City Name,则使用该字段名时,应使用“ ”,例如: City Name=Now York and state=Ca;第第5 5章章 数据库应用程序开发数据库应用程序开发 表5-1 常见的过滤操作符操 作 符含 义大于=等于不等于=大于或等于( )指定复合表达式的求值顺序放在包含空格的字段名两边and、or、not逻辑操作符:与、或、非第第5 5章章 数据库应用程序开发数据库应用程序

30、开发 对于搜索文本的情况,FilterOptions属性可决定搜索时是否考虑大小写。启用部分比较时,指定STATE = M* 之类的过滤器可以使记录集中包含STATE字段以M开头的所有记录。 值得注意的是,过滤操作符与一般C+编程中使用的逻辑操作符是有一些区别的。如“不等于”过滤操作符为,而相应的C+操作符为!=。另外,字符串在过滤操作时一般是放在单引号中的,而C+字符串放在双引号中。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.3.7 查找记录 查找记录的方法有很多,这里所讲的方法适用于TDataSet所有的派生类,而不仅仅是Table组件。但对于客户/服务器数据库,查找通常是通

31、过SQL查询进行的。 Table组件主要使用FindFirst、FindNext、FindPrior和FindLast方法查找记录,这些方法适合于搜索过滤的记录集。另一种搜索方法是使用FindKey和GotoKey以及GotoNearest和FindNearest。这些方法只能对已设置为Key的字段进行查找。 第第5 5章章 数据库应用程序开发数据库应用程序开发 此外,还可以使用Locate和Lookup方法搜索数据表。其优点是不必过滤数据集也不需要使用键就能搜索。其中Locate还能自动优化搜索,如果数据表有索引,则Locate使用该索引提高搜索速度。 使用GotoKey方法查询数据表中记录

32、的步骤如下:第第5 5章章 数据库应用程序开发数据库应用程序开发 (1) 确保要查找的字段是关键字或已经为它定义了辅助索引,并且已在Table组件的IndexName或IndexFieldNames属性中指定索引或关键字。IndexName和IndexFieldNames用法稍有不同,可以在设计时或运行时设置这两个属性,但不能同时使用这两个属性。 (2) 通过调用SetKey方法,把Table组件设置成查找模式。第第5 5章章 数据库应用程序开发数据库应用程序开发 (3) 把查找值送进被查找字段的查找缓冲区。 (4) 调用Table组件的GotoKey方法,如果查找成功,GotoKey返回tr

33、ue值,表中记录指针指向找到的记录。如果查找失败,GotoKey返回false值,表中记录指针不发生变化。第第5 5章章 数据库应用程序开发数据库应用程序开发 【例5-2】 在窗体上放入Table、DataSource、DBGrid组件各一个。指定Table1的DatabaseName属性为BCDEMOS,TableName属性为Customer.db,Active属性为true;DataSource1的DataSet属性为Table1;DBGrid1的DataSource属性为DataSource1。第第5 5章章 数据库应用程序开发数据库应用程序开发 再往窗体上放入一个TEdit、两个TL

34、abel和两个TButton控件。当用户在Edit1控件输入客户编码并单击查找按钮时,程序便开始在Customer表中查找该客户号。如果查找成功,则在Label2上显示“查找成功”,该客户的电话号码就会显示在标签Label1上,并且在数据表栅格中加亮显示该记录。程序运行时如图5-7所示。第第5 5章章 数据库应用程序开发数据库应用程序开发 范例中“查找”按钮的OnClick事件代码如下:void_fastcall TForm1:Button1Click (TObject *Sender)Table1-IndexFieldNames = CustNo;Table1-SetKey ( );Tabl

35、e1-FieldByName (CustNo)-AsString = Edit1-Text;if (Table1-GotoKey ( ) Label2-Caption = 查找成功;第第5 5章章 数据库应用程序开发数据库应用程序开发 Label1-Caption = Table1-FieldByName (Phone)-AsString; else Label2-Caption = 查找失败; 第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-7 使用GotoKey查找第第5 5章章 数据库应用程序开发数据库应用程序开发 【例5-3】 先建立一个职工情况表ZG.db,其中一个字段为

36、XM(姓名)。在程序窗体上放入Table1、DataSource、DBGrid组件各一个并使它们与ZG表连接。在Form1上再放上一个编辑框和一个“查找”按钮,当点击按钮时,程序在ZG表中查找XM与编辑框中内容相一致的第一条记录并在DBGrid内显示。 下面是程序中“查找”按钮的OnClick事件代码:第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fastcall TForm1:Button1Click (TObject *Sender)Table1-Filter = XM =+Edit1-Text+;if (! Table1-FindFirst ( ) ShowMessag

37、e ( 查找失败!); 第第5 5章章 数据库应用程序开发数据库应用程序开发 最后介绍一下使用Locate进行查找的例子,Locate方法的函数原型为: bool_fastcall Locate (AnsiString KeyFields, Variant &KeyValues, TLocateOptions Options); 其中的Options参数用于指定查找方式,它是TlocateOption的集合,集合元素可取值为loCaseInsensitive、loPartialKey,分别表示不区分大小写和允许字符串部分匹配。 下面举一个简单的例子。第第5 5章章 数据库应用程序开发数

38、据库应用程序开发 【例5-4】 类似例5-2,将数据库组件与Customer.db表连接,在编辑框中输入客户号码后点击“查找”按钮开始查找。程序中需要编写如下事件代码: void_fastcall TForm1:Button1Click (TObject *Sender) TLocateOptions Opts; Opts.Clear ( ); Opts Locate (CustNo, Edit1-Text, Opts) ShowMessage (查找成功);else ShowMessage (未找到!);Locate 可以按多个列组合的条件搜索,但语法较复杂,下面举一个例子。第第5 5章章

39、数据库应用程序开发数据库应用程序开发 【例5-5】 我们稍微修改上面的例子,在Edit1中输入公司(Company),窗体上再增加一个Edit2输入地址(Addr1)。编写“查找”按钮的OnClick代码为: void_fastcall TForm1:Button1Click (TObject *Sender) TLocateOptions Opts; Variant locvalues 2; Opts.Clear ( ); Opts Text);locvalues1 = Variant (Edit2-Text);if (Table1-Locate (Company ; Addr1, VarA

40、rrayOf (locvalues, 1), Opts) ShowMessage (查找成功!);第第5 5章章 数据库应用程序开发数据库应用程序开发 运行该程序,就能按公司和地址两个字段的值查找符合条件的记录,如图5-8所示。 程序中,Opts loPartialKey 指定查找方式为部分匹配,当然也可以使用Opts loCaseInsensitive 制作步骤 (1) 建立本范例中使用的数据表“职工.db”。图5-13为在Database DeskTop中设计该表的结构,我们看到在该表中有姓名、工号、性别、工资、职务等字段。为方便起见,我们将该表与本例中的程序存放在同一个文件夹内。第第5

41、5章章 数据库应用程序开发数据库应用程序开发 图5-12 数据表单程序运行时第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-13 职工.db表的结构第第5 5章章 数据库应用程序开发数据库应用程序开发 (2) 在Form1窗体中加入数据访问组件Tabe1和DataSource1并使它们与数据表连接。我们将Table1的DatabaseName 设置为“.”,将TableName设置为“职工.db”;将DataSource1的DataSet设置为Table1。第第5 5章章 数据库应用程序开发数据库应用程序开发 (3) 在窗体上放置五个数据控制组件DBEdit1、DBEdit2、DB

42、Edit3、DBRadioGroup1和DBComBoBox1。 它们的DataSource属性都设置为DataSource1,DataField属性分别设置为“姓名”、“工号”、“工资”、“性别”和“职务”。对DBRadioGroup1还要设置Columns属性为2,设置Items为“男”、“女”。对DBComBoBox1,设置Items为“经理”、“主任”、“科长”、“资料员”和“员工”等。第第5 5章章 数据库应用程序开发数据库应用程序开发 (4) 为了对表单上需填写的数据进行说明,我们还要在窗体内放上五个Label,它们的Caption属性分别为“姓名”、“工号”、“性别”、“工资”和

43、“职务”。 (5) 往窗体上放一个Panel1控件,将它的Align属性设置为alRight。再往Panel1上放八个Button按钮,它们的Caption分别为“First”、“Prior”、“Next”、“Last”、“Insert”、“Delete”、“Post”和“Quit”等。第第5 5章章 数据库应用程序开发数据库应用程序开发 以下是程序中窗体和按钮事件的处理代码: void_fastcall TForm1:Button1Click (TObject *Sender)Table1-First ( );Button1-Enabled = false;Button2-Enabled =

44、 false;Button3-Enabled = true;Button4-Enabled = true;/-第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fastcall TForm1:Button2Click (TObject *Sender)Table1-Prior ( );Button3-Enabled = true;Button4-Enabled = true;if (Table1-Bof) Button1-Enabled = false; Button2-Enabled = false; /-第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fast

45、call TForm1:Button3Click (TObject *Sender)Table1-Next ( );Button1-Enabled = true;Button2-Enabled = true;if (Table1-Eof) Button3-Enabled = false; Button4-Enabled = false; /-第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fastcall TForm1:Button4Click (TObject *Sender)Table1-Last ( );Button1-Enabled = true;Button2-Ena

46、bled = true;Button3-Enabled = false;Button4-Enabled = false;/-第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fastcall TForm1:Button5Click (TObject *Sender)Table1-Insert ( );/-void_fastcall TForm1:Button6Click (TObject *Sender)Table1-Delete ( );/-第第5 5章章 数据库应用程序开发数据库应用程序开发 void_fastcall TForm1:Button7Click (TObject

47、 *Sender)Table1-Edit ( );Table1-Post ( );/-void_fastcall TForm1:Button8Click (TObject *Sender)Table1-Close ( );Close ( );第第5 5章章 数据库应用程序开发数据库应用程序开发 【评析】 (1) 程序中各个按钮的功能也可利用DBNavigator组件实现,但使用DBNavigaor难以扩充或修改其功能,也不能改变其外观。所以,对较复杂的数据表单程序必须编写事件代码,本范例中的代码有一定的参考价值。 (2) 数据输入或修改是在数据控制组件中进行的,一般要在执行“Post”方法时才

48、将改变后的数据写入数据表。但对于本地数据集,BDE在执行“Next”、“Prior”等方法之前会自动调用Post。第第5 5章章 数据库应用程序开发数据库应用程序开发 (3) 本例仅具有最基本的数据表单处理功能,存在诸多不完善。如删除记录时无任何限制,也没有提供警告信息;程序关闭时,若数据已经过修改但还没有执行Post,一般应该有提示信息,但程序中忽略了。读者在实际编写数据库应用程序时要注意这些方面的完善。 (4) 本例一般只能在单用户环境下运行,要使程序能在客户/服务器环境下正常工作,还要考虑更多的因素,并为程序提供异常保护。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.5 TQ

49、uery组件的使用组件的使用 结构化查询语言(SQL,Structured Query Language)具有功能丰富、语言简洁、使用灵活方便等特点,在计算机用户中广泛使用,已经成为数据库语言的国际标准。第第5 5章章 数据库应用程序开发数据库应用程序开发 目前大多数运行于服务器上的数据库管理系统都支持SQL,因此使用SQL有利于开发客户/服务器结构的数据库应用程序。虽然SQL已经成为标准,但是很多数据库厂商对SQL进行了不同程度的扩展。如果在应用程序中使用了非标准的SQL,会给系统的移植带来困难。第第5 5章章 数据库应用程序开发数据库应用程序开发 5.5.1 结构化查询语言SQL 我们假定

50、读者有一定的SQL或关系数据库理论的基础,这里仅简单介绍SQL的最基本语句。这些语句是:SELECT、INSERT、UPDATE、DELETE、CREATE和DROP。 1SELECT语句 SELECT语句是SQL中使用最频繁的语句。在SELECT中可以查询指定数据表中的指定字段值,并可将这些指定的字段值组成的记录放在一个动态集或表中作为返回结果,以便用户对其进行处理。SELECT语句最基本的格式如下:第第5 5章章 数据库应用程序开发数据库应用程序开发 SELECT FROM WHERE子句 GROUP BY子句 HAVING子句 ORDER BY子句第第5 5章章 数据库应用程序开发数据库

51、应用程序开发 说明: (1) “字段列表”指定需要输出的字段或表达式,这些字段一般应来自由FROM指定的表。当字段名中间有空格时,必须将该字段名用方括号括起来。如果要查询表中所有的字段值,可以使用通配符“*”取代字段列表。 (2) WHERE子句可以对表记录指定过滤条件。 (3) GROUP BY子句是针对记录分组的,输出的每一条记录代表原始数据中的一个组,在输出中可以按组进行统计。第第5 5章章 数据库应用程序开发数据库应用程序开发 (4) HAVING子句仅在分组时有意义,它对已产生的组进行过滤。 (5) ORDER BY子句对输出结果指定排序方式。 (6) 查询的结果可生成临时表。 (7

52、) SELECT语句中还可以使用JOIN子句连接多个表作为输入数据。第第5 5章章 数据库应用程序开发数据库应用程序开发 2INSERT语句 INSERT语句用于将一个记录或一组记录添加到指定的表中。它的格式如下: INSERT INTO VALUES( , .) 例如:INSERT INTO Authors VALUES (18188, Mike, 1999) 第第5 5章章 数据库应用程序开发数据库应用程序开发 说明: (1) 当需要插入表中所有的字段时,“字段列表”可以省略; (2) 应保证插入数据的顺序、数据类型和项数要与字段列表中一致; (3) 主索引字段应保证不与表中已有的字段值重

53、复且本身也不为空。第第5 5章章 数据库应用程序开发数据库应用程序开发 3UPDATE语句 UPDATE语句用于更新数据库中的数据,其格式如下: UPDATE SET WHERE UPDATE语句的作用是对表中满足逻辑表达式的记录更新指定的字段。其中,数据设置表达式的格式为=。当有多个表达式时,用逗号进行分割。第第5 5章章 数据库应用程序开发数据库应用程序开发 例如: UPDATE Authors SET Authors.Author = Scott, John WHERE Authors.Au_ID = 888第第5 5章章 数据库应用程序开发数据库应用程序开发 4CREATE语句 CRE

54、ATE语句用于创建表或索引。用于创建表时,应同时指定表中字段的名称、数据类型和长度。语句格式如下: CREATE TABLE ( , .)第第5 5章章 数据库应用程序开发数据库应用程序开发 5DELETE语句 DELETE语句用于删除表中满足条件的记录,其格式如下: DELETE FROM WHERE DELETE语句的作用是删除表中满足逻辑表达式的记录, 如果省略WHERE子句,那么删除表中所有记录。 例如: DELETE FROM Authors WHERE Year Born1900第第5 5章章 数据库应用程序开发数据库应用程序开发 6DROP语句 DROP语句主要用于删除数据库中的

55、表,其格式如下: DROP TABLE 用DROP语句删除表与用DELETE删除表中的记录是不同的,DROP语句删除整个表及其相关的索引。而使用DELETE语句,即使删除表中所有的记录,该表及其相关索引也依然存在,只不过表的内容被删除了。第第5 5章章 数据库应用程序开发数据库应用程序开发 1联机交互式 执行 DatabaseExplore菜单命令打开“SQL Explorer”,在左面的窗口中选择某个数据库别名,打开它的Tables节点。在右面进入“Enter SQL”页输入SQL命令,然后点击按 钮即可运行该SQL语句,右下方的窗口则显示查询的结果,如图5-14所示。 2嵌入式 在C+Bu

56、ilder中,可以使用TQuery类组件的SQL属性或Open及ExecSQL方法中嵌入SQL查询语句,具体的使用将在后面详细介绍。第第5 5章章 数据库应用程序开发数据库应用程序开发 图5-14 在SQL Explorer中执行SQL命令 第第5 5章章 数据库应用程序开发数据库应用程序开发 5.5.2 TQuery组件的属性和方法 本节我们将介绍如何使用TQuery类组件,以及如何通过SQL命令在一个或多个数据表中检索、插入、更新和删除数据。 Query组件位于组件面板的BDE页上。TQuery 组件在SQL编程中占据了十分重要的位置,它实现了BCB对SQL语言的支持。TQuery组件支持

57、SQL语言,因而具备了强大的关系查询能力,TQuery组件可以访问的数据库有:第第5 5章章 数据库应用程序开发数据库应用程序开发 (1) Paradox或者Dbase数据库,这时使用的是本地SQL,支持SQL-92标准语法。 (2) 本地InterBase Server数据库,这时使用的是InterBase引擎,支持SQL-92标准语法及扩展语法。 (3) 远程数据库服务器上的数据库,例如Oracle,Sybase、MS-SQL Server、Informix、DB2和InterBase。必须安装相应的SQL Link驱动器来访问不同的远程服务器,只要是服务器支持的SQL语法我们都可以使用。

58、 TQuery类除了继承其父类TDBDataSet的成员外,还有许多自己的属性和方法。表5-2和表5-3列举了它的一些重要属性和方法。第第5 5章章 数据库应用程序开发数据库应用程序开发 表5-2 Query组件的重要属性 属 性说 明Constrained表示对于Paradox和dBASE数据表格的更新和插入操作是否允许,条件是根据SELECT语句产生的结果DataSource指定数据源Local只读属性。表示查询涉及的表格是本地的Paradox或dBASE表格还是远程服务器上的SQL表格。如果值为TRUE,则只能访问Paradox或dBASE表格ParamCheck指定如果SQL属性在运行

59、时发生改变,查询的参数清单是否更新第第5 5章章 数据库应用程序开发数据库应用程序开发 ParamCount只读属性。表示查询参数的个数ParamsSQL查询的参数Prepared表示执行查询是否准备好RequestLive当查询执行时,表明应用程序是否从Borland数据库引擎(BDE)获取活动结果集。缺省值为FALSE,表示查询总是返回只读结果集RowsAffected只读属性。决定最近一次查询操作被更新或删除的行数,如果值为-1则表示没有更新或删除任何行SQL包含执行查询的SQL语句文本。一次只能包含一条完整的SQL语句。一般不容许多个查询语句,除非特别的服务器支持SQLBinary该属

60、性是无法访问的。指向代表SQL查询语句或结果集的二进制数据串Text指向传给Borland数据库引擎(BDE)的实际文本第第5 5章章 数据库应用程序开发数据库应用程序开发 表5-3 Query组件的重要方法 方 法说 明ExecSQL执行一次SQL命令GetDetailLinkFields获得链接的主细字段清单GetProviderAttributes列出数据集的语言驱动程序、本地表名和只读信息ParamByName返回特定参数的信息Prepare向服务器发送查询准备指令,以便在查询前进行优化UnPrepare释放分配给前面准备好的查询的资源第第5 5章章 数据库应用程序开发数据库应用程序开发 5.

温馨提示

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

评论

0/150

提交评论