![6数据库组件及应用[1].doc_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-3/20/2423f6e5-b77d-4244-8048-a7a6350c9c45/2423f6e5-b77d-4244-8048-a7a6350c9c451.gif)
![6数据库组件及应用[1].doc_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-3/20/2423f6e5-b77d-4244-8048-a7a6350c9c45/2423f6e5-b77d-4244-8048-a7a6350c9c452.gif)
![6数据库组件及应用[1].doc_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-3/20/2423f6e5-b77d-4244-8048-a7a6350c9c45/2423f6e5-b77d-4244-8048-a7a6350c9c453.gif)
![6数据库组件及应用[1].doc_第4页](http://file1.renrendoc.com/fileroot_temp2/2020-3/20/2423f6e5-b77d-4244-8048-a7a6350c9c45/2423f6e5-b77d-4244-8048-a7a6350c9c454.gif)
![6数据库组件及应用[1].doc_第5页](http://file1.renrendoc.com/fileroot_temp2/2020-3/20/2423f6e5-b77d-4244-8048-a7a6350c9c45/2423f6e5-b77d-4244-8048-a7a6350c9c455.gif)
已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数据库组件及应用本章导读内容简介 本章首先介绍了delphi自带的数据库桌面系统以及Paradox数据库,介绍了它们的概况及使用;然后从分层的角度介绍了数据库组件的种类,并详细介绍了各类数据库组件的使用方法和应用技术。本章重点介绍了数据集组件所涉及的一些主要概念,在最后通过一个综合例题,介绍了如何利用数据库组件开发一个应用程序。学习目标1.掌握:delphi数据库桌面系统的基本使用;数据库组件如何连接到一个具体的数据库系统;本章介绍 的数据感知控件的主要属性设置和基本使用方法;2.理解:数据库组件的分层与分工,以及他们之间的连接关系;3.掌握:数据集组件的基本功能,以及在数据库应用中所起的作用;数据集的定位和记录扫描;数据集动态字段、永久字段、计算字段和查找字段的概念及应用;如何访问数据集字段;Table组件和Query组件的基本使用。6.1delphi数据库桌面系统 delphi数据库桌面系统(Database Desktop)是一个简单、实用的数据库操作与管理环境,它支持对多种数据库系统进行操作,其中就包括本书使用的paradox数据库系统。paradox数据库是delphi软件自带的一个数据库系统。当你按标准模式安装了delphi软件后,就会在开始菜单中delphi部分找到“database Desktop”数据库桌面系统,它的默认数据库就是paradox。 paradox数据库是个小型数据库,它具有关系数据库的基本特征。从数据库系统的角度看:一个paradox数据库包含了若干个二维表。但与大型数据库相比,paradox系统本身比较简单,并借用了操作系统的部分功能。例如,paradox的一个表,从操作系统中看就是一个后缀为.DB的文件。对于paradox,一个数据库对应操作系统的一个目录;而在数据库中所建立的若干关系表,就是该目录下的一组.DB的文件。数据库表与文件的这种对应关系在大型数据库中并不是这么简单。 在后面关开数据库组件的讲解中,读者将会看到,开发基于paradox数据库的应用系统,与开发大型数据库(如oracle)的应用系统,在开发方式上并没有什么很大差异,因为delphi数据库组件是通用的,不是针对某种数据库产品的。所以本书虽以paradox作为数据库的实例同,读者完全可以将所学到的知识扩展到其他数据库产品中去。6.1.1数据库桌面系统界面1.桌面系统的窗口界面 进入数据库桌面系统,你会看到图6-1所示的系统主界面。图6-1 delphi数据库桌面系统界面delphi桌面系统是一个典型的MDI(多数据窗口)程序,它主要支持3种类型的子窗口: Table窗口 在该窗口中可以查看、修改数据库表的结构,可以编辑数据库表中的数据。 Query窗口 在该窗口中可以对数据库表进行交互式的查询工作。 SQL编辑器窗口 在该窗口中可以直接输入和执行SQL语句。在图6-1中,工具栏上的3个快捷宾馆分别用于打开上面的3种子窗口。另外,在File(文件)菜单中,也有类似的命令,如表6-1所示。表6-1 有关子窗口的菜单命令File/NewQBE Query新建查询窗口(QBE-Query By Example)SQL File新建SQL文件,并进入编辑窗口(执行SQL语句的主要方式)Table新建关系表File/OpenQBE Query打开已有的QBE文件SQL File打开已有的SQL文件(编辑和执行保存的SQL语句)Table打开已有的关系表图6-2是在桌面系统的主窗口中打开了两个Table子窗口、新建了一个SQLFile子窗口的情况。例如,在这样的环境里,可以参照两个表的数据,在SQL编辑区中练习SQL语句。2.文件与目录delphi数据库桌面系统所使用的文件类型主要有以下四种: .db paradox表文件; .px paradox表主索引文件; .sql SQL文件(存放SQL语句) .bm 存放BLOB字段的数据(图形、备注等字段的大量数据主要存于该文件中,而不是存于表文件中)。在打开或保存数据库有关文件时,经常要用到“目录”这个概念。“目录”包括“工作目录”和和“私有目录”。工作目录代表了一个paradox数据库的位置,用于保存表文件和其他数据库文件。Desktop在打开和保存文件时使用的隐含目录就是工用目录。将来进行应用开发,也要根据工作目录找到想要访问的paradox数据库。 私有目录主要保存数据库操作过程中的一些临时文件。利用File菜单中的working Directory和private Directory命令可以分别设定工作目录和私有目录。图6-3是一个目录设计方案,后面的例子将沿用这个目录设置。(a)working directory对话框 (b)private Directory对话框图6-3paradox数据库目录设置6.1.2建表操作本小节讨论如何利用桌面系统建立paradox数据库的表。1.建立一个数据库表的基本过程(1)首先进入桌面系统的主窗口,执行File菜单中的New命令,并指定建立新的Table(表),如图6-4(a)所示。 (2)在随后出现的对话框中选择数据库类型,对话框的下拉选单中列出了目前主流的数据库产品,有大型数据库系统(如oracle,Sybase,Db2等),也有微机数据库。我们选择delphi自带的数据库paradox7,如图6-4(b)所示。(3)选择了数据库类后,将进入表结构定义对话框,如图6-5所示。在对话框中,每行定义表的一列。在一行中依次输入列名、数据类型、长度(有的类型要求)和主关键字定义等。(4)假如建立dep表,在Field Name域中输入表的第一列的列名dno 。(5)在Type域指定dno列的数据类型。此时不用直接输入类型,而是按下空格键,在弹出的选单中选择列类型。如A(alpha)为字符串,I(Long Integer)为整型等。我们选择Alpha。(6)Alpha类型要求指定字符串长度,所以在Size域中定义列宽,我们指定3 。注意,并不是所有的字段都需要设置列宽(如数值型就不需要)。(7)在key域中定义该列是否为表的主关键字。按空格键后会出现一个“*”号,表示定义该列为主关键字。再按一下空格键,又可以去掉“*”号,即撤销主关键字的定义。当定义表的某列为主关键字时,该列的值必须一且不能为空。系统将为该列建立索引,并按该列的值组织记录(排序)。(8)当定义完dno列后,按回车键,便开始在第二行定义表的下一列。表的各列定义以此类推。图6-6(a)是定义完列的情况,图6-6(b)是完成dep表定义的情况。(9)表的各列定义完成后,按“Save as”按钮,将建好的表保存在我工作目录 中,表文件名字指定为dep.db,同时也就指定了表名为dep。2.paradox表的常用字段类型 本小节通过两张表具体介绍了paradox数据库的数据类型,以及例题用的几张表的定义情况(表6-,6-3)。表6-2paradox提供的常用数据类型(用来定义关系表的列)符号类型长度注释AAlpha1-255字符型(由字母、数字等字符组成)NNumber实型,范围:-10307-10308Sshort短整型,范围-32767-32768ILong Integer长整型,范围:-2147483648-2147483647DDate日期型(形式为年-月-日,如2004-5-21)MMemo1-240备注型(长度表示在表中存放备注文本的前n个字符,其余存放在一个外部备注文件.mb中)LLogical逻辑型(取值为T或F,即真或假)GGraphic(BLOB)图型。目前支持的图形格式有.bmp,.pcx.,.tif,.gif和.eps等。当你将图贴到Graphic字段后数据库就会把图形全部转换为.bmp格式。注:实际上是将一个图像连接到该字段,图像还是存储在外部文件中(.mb)。表6-3本章用以的5张关系表的定义表名及存储文件列名类型长度码说明director系主任表director.db表文件TnoA6 *工作证号TnameA6姓名TitleA6职称dep(系表)dep.db表文件dnoA3*系号dnameA10系名telA4系电话tnoA6系主任student(学生表)student.db表文件snoA6*学号snameA6姓名sexA2性别birthdayD出生年月dnoA3所在系的系号表名及存储文件列名类型长度码说明course(课程表)course.db表文件cnoA3*课程号cnameA10课程名creditS学分ctimeS上课时间quotuS名额sc(选课表)snoA6学号sc.db表文件cnoA3课号注意:在paradox数据库中,表文件名就是表名。3.表定义中的其设置在表定义对话框右侧的“Table property”下拉选单中,有一些选项,通过它们可以对当前的表进行一些设置,如图6-7所示。图6-7 表定义对话框 下面简要介绍几个选项的含义。(1)Validity Checks选项(合法性检查)当选择了Validity Checks选项时,对话框右侧立即显示出对当前关系表的几项检查(如图6-7所示):Required Field如果选取此项,就是定义了表的当前列不能为空。例如在图6-7中首先指定student表的sname列(sname列称之当前列)然后选中Required Field复选框。将来向student表插入一条学生记录时,姓名列不能为空(必须有值),否则系统拒绝接收数据。注意:在向一个表插入记录时,在不违反约束的情况下,有的列可以为空(插入记录时该列的值暂缺),但主关键字不能空。Minimum value和Maximum value 指定表的当前列取值上下限。例如在课程表中,可以设定学分列取值最小值为1,最大值为4。当向课程表插入课程记录时,如果学分 列的值超出指定范围,系统将报错,并拒绝接收数据。Default Value 设定表的当前列的缺省值。例如可以设定系主任表“职称”列的缺省值是“教授”。也就是说,当插入一条系主任记录时,如果没有指定职称,数据库就默认是“教授”。当然,如果你指定了职称,则以你的输入为准。picture以格式描述串的形式设定表中当前列的输入格式。如格式串为(#)#-#时,当输入010627829220后,系统将自动把输入的数据格式转换为(010)627829-220。(2)Referential Integrity(引用完整性约束)引用完整性约束是为了维护表之间的数据一致性。例如dep表和student表,在student表中有dno列(外来码,引用了dep表的主码),该列说明某学生所属的系。这样的两张表是有联系的,实际存在着相互制约的因素。例如删除系记录,如果在学生表中还有若干学生记录属于这个系,这个系的记录是不能删除的,否则会造成两张表的数据不一致性。如果定义了引用完整性约束,系统会负责维护两张表的一致性。在讨论引用完整性约束时,常把dep表称之为“父表”或“主表”,而将student表称之为“子表”或“细表”。下面先看下引用完整性约束的定义过程。图6-8 定义引用完整性约束对话框 在student表定义的对话框中,在Table properties下拉选单中选择Referential Integrity,然后按Define按钮。会出现图6-8对话框。 在图6-8的对话框中,左侧Fields框中显示了学生表的列名清单,选中dno列(外来码),然后点按右箭头按钮将其填入child field框中。 在图6-8的对话框中,右侧Table框中显示了数据库中当前存在的表。我们选择dep表(父表),点按左箭头按钮,父表按钮,父表的主关键字(dno)字段会填入parents key框中。注意:在Table列表框中,系统只显示工作目录下的表。对于对话框中几个单选按钮的功能将结合下面的讲解来介绍。完成上述操作,会出现图6-9所示的画面。按OK按钮,系统会弹出对话框,请你为新建立的引用完整性约束起个名字。例如起名为“stu_dep”。有了这个名字,还可以在以后的操作中,根据需要修改或删除这个约束。 引用完整性约束建立后,系统负责以下数据一致性的维护工作:如果在对话框中你选中prohibit单选按钮,系统将不允许你改变或删除子表中还在引用的父表主关键字值。例如,当子表中还有学生记录的系号是d01时,你就不能在父表中修改或删除dno列中的d01这个值。 如果我在对话框中你选中Cascade单选按钮,那么在父表中对主关键字值的任何改变也将反映到子表中。例如,当你在父表中修改了某个系记录的系号,由d01改为d02,那么在子表中凡是属于d01系的学生记录的系号全部自动改为d02。Cascade隐含方式。当向student表插入记录或修改记录时,dno列的值必须是dep表中某个系的dno值。也就是说,你不能主一个学生所在的系在dep表不不存在。当学生表中还有学生的系号是d01时,你不能在主表(dep)中删除系号是d01的系记录。 通过上述操作过程可以看出,引用完整性约束是在子表的结构定义(或修改)时建立,但此时主表(如dep)必须已经建好,且定义了主关键字,否则引用完整性约束也是没法建立的。(3)secondary Indexes(建索引) 系统对于表的主关键字以及定义了引用完整性约束的外来码列会自动建立索引,例如,按照上面的操作,系统会在student表的sno和dno列上各建 一个索引。另外,还可以在一个表的某列上建立索引。索引是一个树状数据结构,在列上建立索引,可以加快涉及该列的连接、查询速度,还可以影响记录的隐含显示顺序。 例如,为了加快以学生姓名为检索条件(给一个学生名字,查该学生记录)的查询速度,就可以在学生表的sname列上建立索引。 如何建立索引呢?在Table Properties下拉选单中选择Secondary Indexes选项,然后单击“define”按钮,就会出现图6-10所示的对话框,左窗口列出当前表(如student)的列名清单。如果要在sname列上建立索引,就选择该列,然后按右箭头,sname列出现在右窗口中,这就是指定了要建索引的列。单击OK按钮,系统也会提示你输入一个索引名,例如输入“stu_sname_idx”,一个索引用建好了。注意:只有在表中数据量很大的情况下,建立索引才有实际效果。6.1.3Table窗口 在桌面系统主窗口工具栏上按“Open Table”按钮,或在File菜单中执行Open/Table命令,就可以打开一个子窗口,显示一张关系表的内容,如图6-11所示。由于桌面系统采用MDI界面,所以可同时打开几个表窗口。在有窗口中可以对二维表进行结构修改和数据维护等操作。1.修改表结构 在表窗口中单击工具栏中的Restructure按钮,即可进入重构结构对话框,该对话框与建表对话框相同。修改表结构主要指插入和删除列,改变列在表中的次序,改变列的类型与长度,以及重新设置表的一些属性等。在重构表结构对话框中,可移动光标到修改处,然后改变原定义的值。要删除一列,可单击字段前的序号选中它,然后按Ctrl+Del键即可。要插入一个字段,可先选中一列,然后近Ins键便可在该字段前插入一个新的字段。 选中并上下拖动行可以改变列在表中的排列位置。注意:定义了主关键字的列必须排在其他列的前面。当表中已有数据时也可以修改表结构,但有时会破坏表中数据。如果改变了字段的类型缩短了字段的长度,删除了某个字段,或重新定义了合法性检查等,这些操作都可能使原先的数据被破坏或者使合法的数据变成非法。在发生这些情况时系统都会给出警告信息。2.表中数据的维护与浏览 在Table窗口中按下工具栏上的“Edit Date”按钮(图6-11中右面第一个按钮),就可以进入编辑状态。只有在编辑状态中,才可以对表中的数据进行插入、修改和删除操作。将光标移到某行某列,就可以修改此处的值。Ins键可以当前行前插入一行,而Ctrl+Del键可以删除当前行。主菜单Record中也有相关的命令。工具栏中的导航按钮(一组箭头按钮)可以实现对表中数据的浏览。6.1.4SQL窗口SQL窗口为用户提供了一个交互式的SQL语句执行环境。当打开或建立一新的.SQL文件时,桌面系统将打开SQL窗口。利用File菜单中的New/SQL File命令,可以建立一个新的.SQL文件,并为该文件打开一个SQL编辑窗口,如图6-12(a)所示。在该窗口中,你可以输入SQL语句,例如输入一个对学生表的查询语句,如图6-12(b)所示。 单击工具栏上的“Run SQL”按钮,就会执行窗口中的SQL语句。因为查询语句有输出结果,桌面系统会打开一个结果显示窗口,如图6-13(a)所示。实际上在主窗口上包含了两个子窗口:一个是SQL编辑窗口,一个是保存查询结果的窗口。利用window菜单可以在这两个窗口中切换。如果查询结果不需要保存,可以在查看完后关闭结果窗口。在执行SQL语句的过程中,如果语句有错,系统会给出错误提示信息。如果查询的表不存在,系统会弹出图6-13(b)所示的对话框。 SQL编辑窗口提供了一个直接执行SQL语句的环境。在该窗口中,SQL文件可以被打开、编辑、执行和保存。6.2Delphi数据库组件6.2.1数据库组件分类 Delphi是一个通用的面向多种应用的开发工具。由于提供了丰富的数据库组件,因此它也适于开发基于数据库的应用程序,并成为数据库应用领域中的企业级开发工具。 Delphi的数据库组件资源非常丰富。根据作用的不同,数据库组件分成若干大类,并摆放在不同的组件页上。图6-14列出了本书用到的数据库组件的分层结构。 数据库的组件之所以要分层,是为了使每层组件功能专一、通用性强,也便于标准化。从图6-14中可以看出,各个组件分工明确。例如用户界面组件,它们是用户读写数据库的界面;又如数据库连接组件,它们专门负责与各种数据库的连接,为客户端提供了一个跨平台的数据库接口;数据集组件是数据库组件的核心,它们实现了对数据库的读写操作;至于数据源组件,它是连接数据集组件和用户界面组件的桥梁,为用户界面组件提供了单一的数据来源。 这些组件相互连接,从用户界面到数据库,形成了一条通路,数据在它们之间传递。如果用户要查询数据库中的一条信息,该指令通过界面组件发出,以数据源到达数据集组件。数据集组件利用自身的读写功能,通过数据库连接组件从数据库中取得数据。再经数据源组件送到用户界面组件中显示。 比较奇妙的是:即使是在设计阶段,用户界面组件就已经能够动态显示来自数据库的数据,并能够完成某些控制动作。这就意味着,在设计阶段就能看到组件的“表现”是否正常,而不是到运行时才发现问题,这为组件的属性设置提供了很大方便。所以将用户界面组件叫做“数据感知控件”,或“数据控件”。 应用程序运行后,除了数据感知控件会出现在用户界面上之外,其他组件是在后台工作,在用户界面上并不“露面”。表6-4列出了本章用到的全部数据库组件,请读者结合图6-14理解它们所处的位置和与其他组件 的关联。表6-4数据库组件用户界面组件(数据感知控件)Data controlsDBNavigator导航按钮,用于控制数据集数据浏览和数据维护DBGrid以表格形式(多行多列)显示和操纵数据集数据DBText显示来自数据集某字段的数据(类似于Label)DBEdit单行编辑框,能显示或编辑数据集某字段的数据DBMemo多行编辑窗口,能显示或编辑数据集某字段的数据DBImage显示来自数据集当前记录的某BLOB字段的图像DBListBox该列表框与数据集某字段相连,用户可以通过在列表中选择某项来改变数据集当前记录的字段值DBComboBox与数据集某字段相连,以组合框形式显示或输入数据DBCheckBox与数据集某字段相连,以复选框形式显示或输入数据DBRadiGroup与数据集某字段相连,以单选按钮形式显示或输入数据DBLookupListBox以列表框形式显示来自另一数据集的数据,填充当前数据集的字段值DBLookupComboBox以组合框形式显示来自另一数据集的数据,填充当前数据集的字段值数据源组件Data AccessData Source在数据集组件和数据感知控件之间提供了一个接口数据集组件BDETable封装了一个数据库的表,其实现对表的读写操作Query封装了一个SQL语句及执行该语句的相关操作数据库连接组件BDEDatabase建立与数据库的连接,并对该连接设施控制说明:黑括号中是各组件所在的组件页标签 从表6-4中可以看出,除个别组件外,Data Controls页上的数据库控件与标准组件页上的控件很相似。例如:Standard页上有Edit,Data Controls页上有DBEdit。数据控件的名字都以DB开头,后面的名字与Standard页上的组件名相同。这两类组件确实有相似之处,但数据感知控件都是与数据相连,所以数据来去有预先定义的渠道。页Standard页上的组件没有数据源,所以它们的数据要由程序代码控制。下面先简要介绍各层组件 的基本功能。6.2.2数据库连接组件Database Database是紧靠数据库的一个组件,它负责与各种数据库的连接,并为数据集组件提供了一个数据库的统一接口。从数据集组件的角度看,Database就相当于是一个数据库。Database组件是一个非可视组件(不出现在用户界面上),它可以建在某个窗体上。但与其他组件不同的是,它不属于某个单元或窗体,而是属于整个应用程序。在一个项目中,如果连接一个数据库,只需要建立一个Database组件就可以了,各窗体上的数据集组件都可以与之相连。下面介绍Database组件的使用方法。 在窗体上(比如在主窗体上)建立一个Database组件,双击该组件,会出现图6-15(a)所示的对话框。图6-15Database数据库连拉组件 首先在Name框中输入一个名字,该名字就是Database组件的DatabaseName属性值。注意:这个名字对于数据集组件来说,就是要指定的数据库的名字。在图6-15中,输入的名字为“mydb”。 在Driver Name复选框中,可以选择(也可以直接输入)一个要连接的数据库的数据库的驱动程序。如果要连接Delphi自带的paradox数据库,可以选择STANDARD驱动器名。如果要连接别的数据库,比如大型的Oracle数据库服务器,就要选择Oracle驱动程序。Delphi提供了绝大多数市面流行的关系数据的驱动程序。 驱动程序确定后,单击“Defaults”按钮,在“parameter Overrides”参数设置框中就会出现与驱动程序对应的一组参数及隐含值。参数框中的内容是随数据库的不同而不同的。由于我们选择的是Delphi自带的paradox数据库的驱动程序(STANDARD),所以参数比较简单。参数PATH就是指定一个paradox数据库所在的目录。根据上一章的设置,指定PATH=D:mydb。对话框中的Options选项可以照图中设置。 此时可以单击OK按钮关闭对话框。如果留意下Database的属性设置,见图6-15(b),会看到两重要的属性都已设置好:即Database和DriverName,它们都是在上述对话框中指定的。另外,还有一个属性需要特别关注,那就是Connected。只有当这个属性为True,数据库的连接才真正建立,否则是处于断开状态。在程序调试过程中,特别是修改Database组件属性及驱动器参数后,Connected属性会变为False,此刻要及时将它置为True。6.2.3数据集组件 本章用到的两个主要的数据集组件都在BDE标签页上,如图6-16所示。它们都是非可视组件,因此可以放在窗体 上的任何位置,并属于窗体所有,但不会出现在运行界面上。图6-16数据集组件页 Delphi应用程序对数据库的所有操作都是通过一组数据集组件实现的。数据集组件提供了访问数据库的功能。下面就来介绍数据集组件Table和Query。1. Table组件一个Table对象与数据库中的一个表相联系,它提供了对该表的各种读写功能。建立一个Table对象的步骤如下:在一个窗体上建立一个Table对象,并为它指定一个恰当的标识名(Name属性值)。系统为Table对象起的隐含名字为Table1,Table2设置DatabaseName属性 该属性就是指定Table对象所要连接的数据库的名字,该属性值可以通过下拉选单来选取。凡出现在下拉选单中的数据库名都是目前可以连接的数据库,这些数据库名都是事先利用多种方式创建的,且不同的数据库有不同的创建过程。比如在建立Database对象时所设定的DatabaseName属性值(mydb)也会出现在这个下拉选单中,现在就选取它。 这样,数据集组件Table就与一个具体的数据库(Delphi的paradox数据库)连上了。设置TableName属性 因为Table对象是和一个数据库的一张表相联系,所以光指定数据库还是不够,还要指定数据库中的一张关系表。TableName属性就是指定这个表名的。该表名也可以从下拉选单中选取。在下拉选单,列出了指定的数据库中可以使用的表的清单。在mydb中,已建立了很多表,例如选择其中的Student.db。设置Active属性 该属性决定是否打开数据集组件。如果Active属性为True,则打开Table,Table可以读写数据,前台的控件也可以通过它访问数据库;如果Active属性为False,数据集关闭,它停止读写数据。 如果要使用Table读写数据,必须打开它,但某些工作(如对Table进行属性修改)也应该在关闭Table时进行,之后再打开它。2.TQuery组件 一个Query组件封装了一条SQL语句(主要是DML),并提供了对该SQL语句的操作控制,其中还包括对查询语句返回结果的访问功能。因此,该组件实际上是为你在Delphi环境中提交一条SQL语句提供了途径。建立Query对象的过程如下:在一个窗体上建立一个Query对象;设置DatabaseName属性;设置Query对象要访问的数据库名,也就是指定SQL语句所要访问的数据库。在Query对象的SQL属性中编写一条SQL语句(例如插入、修改、删除或查询);注意:与Table对象不同的是,Query对象没有指定表名的属性,因为所要访问的表包含在SQL读写语句中。 比较一下这两个数据集组件,它们各有特点。Table组件封装了对一张表的读写操作,在针对一张表操作的情况下,Table组件最方便,几乎不需要编写任何代码;而Query组件由于可以“容内”并执行一条SQL语句(DML语句),如果读者已掌握了SQL语句的用法,那么Query组件就显得更为灵活。在一个应用中,在每一个窗体上,都可以建立若干数据集组件对象。 在这里,有必要比较一下数据集和数据库两个概念的差异。数据库是表、索引等各种数据库对象的集合。而数据集主要是引人表中的数据,数据库是表、索引等各种数据库对象的集合。而数据集主要的引入表中的数据,数据集是从Delphi角度看待表中数据的概念。例如一个Table对象,它封装了数据中的一张关系表,并提供了对于该表的读写功能及其他控制。表中的数据就是Table对象操作的数据,因此数据集也是有行、列的概念。 有关数据集组件更深入的内容,将在后面的章节中继续讲解。在本节最后,再介绍一下数据源组件DataSource,它在“Data Access”标签页上。前面已经说过,数据感知控件是显示和操纵数据库中数据的控件。为了给数据感知控件提供一个抽象层和标准接口,Delphi专门提供了一个数据源组件TDataSource。该组件也是一个非可视组件。 对于第一个数据集组件,若要让数据感知控件显示和操纵它的数据,就必须与一个数据源组件相连。同样,第一一个数据感知控件,为了能接收和操纵数据,也必须与一个数据源组件相连。所在,数据源组件的关键属性就是DataSet,它的值就是所要连接的数据集对象的名字,如Table。同样,所有数据感知控件的关键属性就是DataSource,它的值就是要连接的数据源对象名字,如DataSource1。6.2.4数据感知控制(一) 该类控件在Data Controls标签页上(见图6-17),这些控件可以显示数据库中的数据、或提供操作数据的接口。该类控件的大部分与前面介绍 的位于Stadndard标签页上的基本组件名称类似,界面也相像,如DBEdit,DBMemo,DBCheckBox等。但它们都 有指定的数据源,都 可以与数据库的数据相联系,数据库应用程序的界面采用这些控件最为方便。图6-17数据感知控件页 在介绍每个数据控件的使用之前,先看下它们所具有一些基本特征。数据感知控件在设计阶段就具有数据感知的能力,并因此而得名。当你在创建应用时,只要数据集打开,便能够立即看到有效数据。这就是说,无需编译和运行应用程序,在设计时就能验证应用能否正确显示数据。 在程序运行时,数据控件不但能显示数据,用户还可以通过它编辑数据库中的数据。所以说数据控件是数据 库应用程序中用户在界面上操作的主要对象。 在设计数据控件时,首先要定义好一个数据集和一个数据源。然后选取一个数据控件放置在窗体上,将数据控件的DataSource属性设定为要与之相连的数据源组件的标识名。另外,大多数数据控件还需要将DataField属性设定为所要显示的字段的名称)。 当设计让数据控件显示数据库中的数据时,数据库连接组件、数据集组件、数据源组件及数据控件要连接好,数据从数据库中到达数据感知控件要“一路畅通”。 当设计通过数据控件对数据库进行写操作时,数据要经过数据控件、数据源、数据集、数据库连接等几道“关口”,有一道不关口不通,写操作就不能实现。 数据控件的ReadOnly属性决定用户能否编辑在控件中显示的数据。缺省值为False。若要防止用户修改数据库中某字段的值,可将连接该字段的数据控件的ReadOnly属性设为True,相当于将数据控件置为只读状态。 数据源的Enabled属性决定了与之相连的控件是否能显示来自数据集中的字段值,当然也就决定了能否编辑数据集中的数据。如果Enabled属性为True(默认值),则控件能够显示字段值。 数据集的ReadOnly属性决定了用户能否对表进行写操作。若该属性为False(默认值),则用户可以利用数据集组件对表进行写操作,否则被设为只读。 下面结合例子分别介绍一下数据控件的使用方法。1.数据导航控件DBNavigator 在数据控件中,只有这个控件不是用于访问数据,而是用于控制数据的访问。该控件由10个按钮组成,如图6-18所示。图6-18 DBNavigator控件下面从左到右依次说明这10个按钮的基本功能:First将当前记录定位在数据集的第一条记录上;Prior将当前记录设在前一个记录上;Next将当前记录高在后一个记录上;Last将当前记录定位在数据集的最后一条记录上;Insert在当前记录之前插入一条新的记录,并使数据集进入Insert和Edit状态;Delete删除当前记录,并使下一个记录成为当前记录;Edit使数据集进入编辑状态,并使当前记录可以被修改;Post将当前记录的修改写到数据库中;Cancle取消对当前记录所作的修改,并使它恢复到修改之前的状态,关闭数据集的修改或插入状态Refresh刷新数据集,以便显示数据中的最新数据(主要对Table) 导航控件实现了对数据集中数据的定位、编辑、插入、删除、提交等功能。导航控件之所以能够控制数据感知控件的读写(如显示那条记录),并不是它对控件直接进行干预,而是通过控制数据集改变数据集的当前记录和数据集的状态,然后又反过来影响到数据控件。2.单字段数据感知控件 该类控件通常能够显示并编辑数据集中当前记录的某个字段,这些控件除了必须指定DataSource属性外(相连的数据源),还要指定DataField属性(相连的字段)。下面简单介绍下一常用控件的功能:。DBText将来自一个字段的数据以标签形式显示,因此文本的显示是动态的,且是只读的DBEdit该组件用一个编辑框与数据集的一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程管理领域专业技能考核与题型分析及模拟题
- 2025年初级摄影技巧进阶教程与实战模拟题集
- 2025年京东物流仓储经理招聘考试预测题
- 抢救课件标题
- 2025年子宫收缩药项目建议书
- 2025年碳酸乙烯酯项目发展计划
- 2025年巷道式智能化孵化器项目合作计划书
- 动物伦理学题库及答案
- 扫地车安全培训技术交底课件
- 2025年文化行业专业考试题及答案
- 地下水污染的控制与修复课件
- 设备设施管理培训课件
- 医院检验科实验室生物安全管理手册
- 维生素D与女性生殖健康的预防
- 个人会员入会申请表
- 原始社会的解体和阶级社会的演进统编版高中政治必修1
- 万人计划青年人才答辩万人计划青年拔尖人才课件
- 【课件】什么是美术作品+课件-2023-2024学年高中美术湘美版(2019)美术鉴赏
- 音乐节活动预算模版
- 离婚协议书下载电子版完整离婚协议书下载
- 《Photoshop图像处理》课件-第一讲 认识PS
评论
0/150
提交评论