您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 《数据库应用技术――Delphi应用系统开发》-第六章
第6章数据库操作本章学习要点l学习数据库组件的作用及其设计l学习ADO组件的使用方法l掌握Delphi中SQL编程l掌握字段对象的使用方法l掌握数据库操作2020/2/92数据库是数据表的集合(特指关系型数据库)。因此,数据库应用程序就是处理各种数据表的应用程序。这些数据表以行(记录)和列(字段)的形式来组织信息。它们能够用一些简单的关系运算符进行操作。设计一个数据库应用程序时,必须完整地了解数据的结构,才能设计出一个合适的界面来显示数据库中的数据,并且允许用户输入新的数据或者修改已有的数据。Delphi集成开发工具中包括了创建数据库应用程序的所有通用元素,可以方便地实现诸如数据库查询这样的数据库功能。2020/2/936.1数据库组件Delphi使用VCL类将数据库引擎BDE(BorlandDatabaseEngine)封装成对象,为数据库应用程序开发人员提供一致的访问接口。一个数据库应用程序在逻辑上通常由两部分组成,即数据访问链路和用户界面。Delphi的数据库组件也相应地包括数据访问组件和数据控制组件,它们分别实现数据访问链路和用户界面的功能。Delphi提供的可使用BDE数据库引擎访问数据库的组件可以分成下面的3类。lBDE组件:该组件集提供了以BDE方式访问数据库的数据库表和查询等数据集组件。l数据访问(DataAccess)组件:该组件集提供了数据源(DataSource)等连接组件。l数据控制(DataControls)组件:该组件集用来浏览和编辑数据,它们为用户使用数据库提供接口。2020/2/94组件面板中的DataAccess、DataControls和BDE页中有不同的数据库对象,其中DataAccess和BDE页中的对象为非可视化对象,而DataControls页中包含的为可视化对象。6.1.1数据库引擎组件页简介BDE数据集部件包含了用于各种BDE数据引擎的数据集构件,这些构件封装了数据库连接、数据表格、数据查询等特性。如图6-1所示。图6-1BDE数据集部件当要创建一个数据库应用时,首先在窗体中选择一个BDE数据集部件,然后为BDE数据集部件设置有关的属性,说明要访问的数据库、数据表以及表中的记录等,BDE数据集部件为数据控制部件与数据源建立了一条通道。2020/2/95表6-1BDE数据集部件2020/2/96需要指出的是在绝大多数数据库应用程序中,一般都是使用数据集部件Table、Query或StoredProc与磁盘上的数据库进行连接,用DataSource组件连接数据控制部件和数据集部件,当然用户也可以自定义数据集部件,用于数据库应用当中,Table、Query和StoredProc部件中都包含一个不可见的Fields,Fields是一个串列表,它对应于数据库表或一个查询结果的列表字段。6.1.2Table组件Table组件是Delphi数据库编程中要经常使用的最重要的部件之一,是数据库应用程序访问数据库时必须使用的数据集组件之一。Table组件可以访问数据库表格中的每一行和每一列。它既可以访问本地的数据库如(Paradox、dBASE、Access、Foxpro),还可以访问远程数据库如InterBase、Sybase和SQLServer。它不但可以显示和编辑表格的所有行和所有列,而且可以选择一定范围内的行,或者用过滤技术检索出其中一部分行,可以搜索记录,复制、换名或删除一个表格。2020/2/97利用Table组件程序员甚至可以不需要编写任何程序便可对数据库进行访问,在一个应用程序窗体中放置一个Table组件的过程如下:l在组件选择板上选择DataAccess页。l单击Table图标。l在窗体内单击鼠标,获得一个Table组件。l为Table组件设置有关的属性。DatabaseName属性指定要访问的数据库所在的路径名,路径名可以用别名来表示。TableName属性指定要访问数据库中具体的数据库表。Acitve属性设置为True时,表示打开要访问的数据库表;设置为False时,暂时不打开要访问的数据库表。2020/2/98l指定字段显示的顺序。l为每个字段指定一个用于显示的字符串。l为字段增加合法性检验。l为显示的需要还可以建立新的字段(如可计算的字段),具体的使用方法见6.5节的内容。Table组件是Delphi所提供的对数据库最简单而快捷的访问方法。对于大多数本地数据库和简单的远程数据库应用程序,一般使用Table组件,当需要使用SQL查询语言或访问大型的SQL服务器时,则通常使用Query组件。下面通过一个简单的数据库应用程序讲述Table组件的用法。例子用于查询雇员数据库,程序是通过输入雇员的编号后查询出该雇员的有关信息,首先新建一个应用程序(Application),放置一个Table组件、一个DataSource组件、三个Label组件和两个Button组件,按表6-2的要求调整组件的一些关键属性,实例程序的设计界面如图6-2所示。2020/2/99图6-2程序设计界面表6-2组件的属性设置2020/2/910单击“”按钮Button1的事件处理过程代码如下:procedureTForm1.Button1Click(Sender:TObject);beginwithtable1dobeginlabel3.Caption:='';indexfieldnames:='empno';setkey;//调用table1的setkey方法把与表对应的数据集设置成查询状态ifedit1.Text=''thenshowmessage('请输入查询雇员号')elsetable1.FieldByName('empno').AsString:=edit1.Text;ifgotokeythen//调用table1的gotokey方法查找符合条件的记录beginlabel3.Caption:='查找成功';edit2.Text:=table1.fieldbyname('lastname').AsString+'-'+table1.fieldbyname('firstname').AsString;//标签姓名后的文本框显示雇员的最后一个名字和第一个名字,中间用减号格开2020/2/911memo1.Lines[0]:='雇员号:'+table1.fieldbyname('empno').AsString;memo1.Lines[1]:='姓名:'+table1.fieldbyname('lastname').AsString+'-'+table1.fieldbyname('firstname').AsString;endelsebeginedit2.Text:='此人不存在';label3.Caption:='查找失败';memo1.Lines[0]:='此人不存在';memo1.Lines[1]:='';end;end;end;程序的执行结果如图6-3所示。2020/2/912图6-3程序的执行结果6.1.3Query组件Query组件提供一种使用SQL语句进行数据访问的方法。该方法可以指定一个表中需要使用的记录集合或列集合,也可以指定需要同时访问的多个数据库表。Query组件是程序员使用SQL语句开发数据库应用程序的有力工具,因为使用SQL语言,可以非常方便灵活地对一个或多个数据库表中的记录进行访问,所以利用Query可以查询本地的数据库如Paradox和dBASE数据库系统中的数据,还可以使用Query组件对一个远程的数据库SQL服务器进行访问,建立客户/服务模式的应用程序,SLMIS为典型的客户端/服务器模式的应用系统。2020/2/913SQL属性:指定对数据库表进行访问的SQL语句,它可以是一条查询语句也可以是一条修改语句或插入语句等。在对象浏览器上,单击SQL属性时,会打开一个字符串编辑器供程序设计者输入SQL语句。注意:在Query组件中,不是用TableName属性来指定要访问的数据库中的数据库表,而是在SQL属性中,通过SQL语句静态地指定将要访问的数据库表。SQL属性也可以在程序中动态地设置,程序员进行设计时常常是采用动态设置的方法。下面举一个例子来说明如何使用Query组件进行动态SQL语句的程序设计。本例将创建一个供用户使用的SQL编辑器界面,当用户输入SQL语句后.如果没有语法错误,可以直接得到SQL执行的结果。实例程序的设计界面如图6-4所示。设计界面中各个组件的属性如表6-3所示。由于设置Query的DatabaseName属性时将其设置为DBDEMOS,所以设计的这个SQL程序编辑器只能对DBDEMOS中的数据库表进行操作。2020/2/914图6-4程序设计界面表6-3组件的属性设置2020/2/915单击“”按钮Button1的事件处理过程代码如下:procedureTForm1.Button1Click(Sender:TObject);begintryQuery1.Close;Query1.SQL.Clear;Query1.SQL.Add(memo1.Text);Query1.Open;exceptonedatabaseerrordoQuery1.execsqlend;end;在上面的代码中,使用了“异常”处理结构进行编程。“异常”处理结构包括两种格式:Try…Finally格式和Try…Except格式。其中Try…Except格式如下。2020/2/916try程序代码段1excepton异常类型1do处理方式1;on异常类型2do处理方式2;on异常类型3do处理方式3;…其他代码段end;如果在程序代码段1中出现了异常,系统将转向Except部分寻找解决办法。如果在Except部分给出了此种异常类型的解决分支,就执行该分支中的程序,否则就按缺省方式处理。2020/2/917图6-5执行SQL编辑器在Query组件中,SQL查询语句使用Open方法执行,而其他类型的SQL语句(例如Insert、Delete、Update等)需要使用ExecSQL方法执行。如果在程序中只使用Open方法执行SQL语句,在使用程序执行非查询的SQL语句的时候,系统将产生Edatabaseerror异常。使用Try…Except异常结构,将ExecSQL方法置于Except部分,就可以使程序适用于两种不同情况的需要。下面给出单击“”按钮Button2的事件处理过程。2020/2/918procedureTForm1.Button2Click(Sender:TObject);beginmemo1.Clear;Query1.Close;end;单击“”按钮时,备注框中的内容将被清除,同时Query1组件被关闭,窗体中的数据控制组件DBGrid1将处于空白状态。这样一个简单的SQL编辑器的设计就完成了。该例子执行之后如图6-5所示。6.1.4StoredProc组件在数据库应用程序中,有时候需要对大量的记录进行操作,此时应用程序的效率往往受到影响。存储过程正是用来解决这一问题的,因为存储过程是在数据库服务器上,所以它的执行效率比较高,从而可以改善应用程序的性能。2020/2/919Delphi中可以使用StoredProc组件来访问和操纵服务器上的存储过程。StoredProc组件是数据集组件,从TDataSet派生而来。但是,用它们来访问存储过程时是有很多差别的。StoredProc组件适合于执行那些不需要返回数据,并且通过输出参数来返回信息的存储过程。Params属性:此属性用来储存存储过程中输入和输出的参数。Params的属性值是一个参数值的数组。在运行时可以通过访问Params属性值来动态地设置参数名、参数值和数据类型。在执行了存储过程之
本文标题:《数据库应用技术――Delphi应用系统开发》-第六章
链接地址:https://www.777doc.com/doc-3589848 .html