Delphi程序的设计基础教程第10章 数据库编程基础_第1页
Delphi程序的设计基础教程第10章 数据库编程基础_第2页
Delphi程序的设计基础教程第10章 数据库编程基础_第3页
Delphi程序的设计基础教程第10章 数据库编程基础_第4页
Delphi程序的设计基础教程第10章 数据库编程基础_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

DELPHI程序设计基础教程 第十章数据库编程基础.第十章数据库编程基础本章学习导读10.1Delphi数据库编程基础10.2数据源组件DataSource10.3数据集组件DataSet10.4BDE数据集组件10.5ADO组件10.6数据控制组件本章小结2023/2/3.本章学习导读Delphi最强大的地方就在于对数据库的支持,Delphi可以访问多种数据库管理系统的数据库,可以访问诸如Paradox、dBase、本地InterBase服务器的数据库,也可以访问如Oracle、Sybase等远程数据库服务器上的数据库,或任何经ODBC可访问的数据库管理系统中的数据库。本章首先对Delphi数据库的编程基础做简单介绍,然后通过向导实际的建立一个数据库应用程序,接着详细介绍常用的数据组件的使用方法,最后介绍了通过ODBC访问数据库的方法。2023/2/3.10.1Delphi数据库编程基础数据库应用程序的构成一个数据库应用程序通常由两部分组成:数据库访问链路和用户界面。Delphi采用开放式数据库体系结构,允许用户采用任何可获得的数据库引擎来创建数据库程序。Delphi使用可视化组件创建数据库应用程序,和创建其他应用程序一样,数据库组件同样具有一定的属性,程序员可以在设计过程中设置组件的各种属性,也可以在程序运行过程中通过代码来改变数据库组件的各种属性。2023/2/3.10.1Delphi数据库编程基础数据库引擎BDE、ADO简介1.BDE数据库引擎BDE数据库引擎〔BorlandDatabaseEngine〕是Borland公司推出的一种特有的用于访问数据库的机制,它可以让多个程序共享,为应用程序与数据库的连接提供了灵活性和通用性。BDE中封装了各种数据库驱动程序,可以访问本地数据库Paradox、dBase、FoxPro和Access,通过SQLLinks驱动程序又可以访问远程数据库如InterBase、Oracle、SqlServer和DB2。BDE支持的面很广,因为它可以连接到ODBC,而ODBC本身就可以支持很多数据库,所以凡是ODBC可以连接的数据库,BDE都可以连接。BDE的基本构思是把应用程序与具体的数据库隔离开,提供一个统一的结构供用户使用,应用程序不再直接与具体的数据库打交道,而是向BDE提出操作数据库的申请,由BDE具体操作数据库,并把结果返回给应用程序。2023/2/3.10.1Delphi数据库编程基础2.ADO数据库引擎ADO数据库引擎〔ActiveXDataObject〕是微软推出的一套数据库访问规范。它使应用程序能够通过一种叫做OLEDB提供者〔OLEDBProvider〕的驱动程序访问和操作数据库,OLEDB是微软定制的通向不同的数据源的低级应用程序接口,OLEDB不仅包括微软的标准数据接口开放数据库连通性〔ODBC〕的结构化问题语言能力,还具有面向其他非SQL数据类型的通路。OLEDB也是一个基于COM的数据访问规则和API函数的集合,并经过了简化。实际上,ADO以ActiveX组件的形式封装了OLEDB,以提供一个更友好方便的使用方式。2023/2/3.10.2数据源组件DataSource数据源组件的属性数据源〔DataSource〕组件是连接数据集组件〔如Table、Query、StoredProc〕与数据控制组件的桥梁,数据控制组件的DataSource属性指定数据源,而数据源的DataSet属性指定数据集。使用DataSource组件,必须设置它的DataSet属性,这是用来指明一个与当前数据源组件相联系的已知数据集组件的名字,其它属性可以根据需要设定。数据源组件位于工具栏的DataAccess选项卡。(1〕DataSetDataSet属性是用来指明一个与当前数据源组件相联系的已存在的数据集组件的名字。可以在设计阶段通过对象检视器来设置DataSet属性,也可以在运行时通过代码修改该属性值。应用程序通过改变DataSet属性可以实现在同一个数据控制组件中显示和编辑不同数据集组件中的数据。(2〕EnabledEnabled属性决定了与此数据源组件相连的数据控制组件是否显示数据,如果Enabled属性值为默认值True,数据控制组件将显示数据,如果Enabled属性值为False,则所有与此数据源组件相连的数据控制组件都将不显示任何数据。(3〕StateState属性是用来读取与此数据源组件相连的数据集组件的当前状态。数据集组件的当前状态表明了能对数据集所做的操作。2023/2/3.10.2数据源组件DataSource数据源的方法DataSource组件的方法使用的比较少,只需了解即可(1〕Create调用Create方法会创建一个DataSource组件(2〕EditEdit方法可使与数据源联系的数据集进入编辑状态,可以通过修改数据源的AutoEdit属性来实现该功能。2023/2/3.10.2数据源组件DataSource数据源的常用事件(1〕OnDataChange当与该数据源组件相连的数据集的当前记录被编辑后,应用程序转移到其它字段或者转移到其它记录时触发该事件。由于该事件可被所有变化触发,所以能确保数据控制组件反映当前数据集中的字段值。(2〕OnStateChange当与数据源连接的数据集状态发生改变时会触发该事件。(3〕OnUpdateData当前的记录被更新时触发该事件,该事件在数据集的Post方法之前被调用,一般用于在数据提交前进行附加的处理和确认操作。2023/2/3.10.3数据集组件DataSet数据集的打开与关闭在Delphi中,访问数据的基本单元是数据集对象,应用程序也是通过数据集组件来访问数据库。一个数据集对象就代表了数据库的一张表格,或者是访问数据库的一个查询或存储过程。数据集组件DataSet是一个抽象类,定义了一些关于数据集的基本属性、方法和事件。在应用程序中实际使用的是它的子类Table、Query、StoredProc、ADOTable、ADOStoredProc等组件。Table、Query和StoredProc组件位于工具栏的BDE选项卡。Active属性用来说明数据库文件的打开状态。应用Active属性来决定及设定一个数据集组件与数据库数据之间的关系。当Active属性值为True时,表明数据集是打开的,数据集组件可以对数据库进行读写操作,否则表示数据集是关闭的,数据集组件不能从数据库读取数据,也不能向数据库中写数据。应用程序在改变其它影响数据库状态或在应用程序中显示数据的组件状态的属性之前,必须先将Active属性设置为False。2023/2/3.10.2数据源组件DataSource对数据集的数据读、写都必须先打开数据集,打开数据集有两种方法:(1〕将Active属性值设置为True;(2〕调用数据集的Open方法。关闭数据集同样有两种方法:(1〕将Active属性值设置为False;(2〕调用数据集的Close方法。2023/2/3.10.3数据集组件DataSet数据集状态State属性是用来读取与此数据源组件相连的数据集组件的当前状态。数据集组件的当前状态表明了能对数据集所做的操作。当Enabled属性值为False或者没有指定DataSet属性的情况下,无论数据集组件的实际状态如何,State属性总是为dsInactive。其它情况下State属性值与数据集的当前状态一致。2023/2/3.10.3数据集组件DataSet数据集的浏览(1〕BOF和EOF属性BOF〔BeginningofFile〕属性值为一个布尔值,表明当前记录指针所处的位置是否为记录集的第一个记录。如果BOF为True,表明当前记录指针所处的位置确实是数据集的第一个记录。EOF〔EndofFile〕属性值为一个布尔值,表明当前记录指针所处的位置是否为记录集的最后一个记录。如果EOF为True,表明当前记录指针所处的位置确实是数据集的最后一个记录。(2〕First方法在DataSet的派生类中,调用First方法将记录指针移至数据集的第一条记录处,并使之成为当前记录。同时将BOF属性值设置为True。(3〕Last方法Last方法与First方法非常相似,只不过Last方法是将记录指针移至数据集的最后一条记录处,并使之成为当前记录。它将EOF属性值设置为True。2023/2/3.10.3数据集组件DataSet(4〕MoveBy方法MoveBy函数的基本格式如下:functionMoveBy〔Distance:Integer):Integer;调用MoveBy方法是将记录指针指向数据集中与当前记录相关的一条记录处,Distance是指需要移动的记录数目。距离是正值表明在数据集中朝前移动,负值表明是朝后移动。(5〕Next方法调用Next方法将记录指针置于数据集中的下一条记录,并使之成为当前记录。如果记录指针已处于数据集的最后一条记录,就将EOF属性值设置为True。(6〕Prior方法Prior方法与Next方法非常相似,Prior方法将记录指针置于数据集中的上一条记录,并使之成为当前记录;如果记录指针已处于数据集的第一条记录,就将BOF属性值设置为True。2023/2/3.10.3数据集组件DataSet对数据集进行的操作(1〕Append调用Append方法不仅可以在数据集的末尾建立一个新的空记录,还可以将新的记录设置为当前记录。在调用Append方法后,应用程序允许用户向记录的字段中输入数据,并且能够通过调用Post方法将这些更改提交给数据库。(2〕Cancel调用Cancel方法可以用来取消对当前记录中一个或多个字段的修改。在这些更改还未提交给数据库时,Cancel方法使记录恢复到修改前的状态,并将数据集置于dsBrowse状态。(3〕Delete调用Delete方法用来将当前记录从数据库中删除。如果该数据集处于激活状态,Delete方法将产生一个异常事件。(4〕Edit调用Edit方法用来编辑数据集中的当前记录。(5〕Insert调用Insert方法不仅可以在数据集中打开一个新的空记录,还可以将新的记录设置为当前记录。在调用Insert方法后,应用程序允许用户向记录的字段中输入数据,并且能够通过调用Post方法将这些更改提交给数据库。(6〕Post调用Post方法用来向数据库提交一个修改的记录。数据集中编辑修改数据库数据的方法如Edit、Insert或Append,以及浏览数据库中数据的方法如First、Last、Next和Prior都会自动的调用Post方法。2023/2/3.10.3数据集组件DataSet数据集的字段字段组件代表了数据集中各个独立的字段,Delphi中定义了字段类Field及其相关的属性和方法,并提供了Field的派生对象。字段组件是非可视组件。一般来说,一个简单的字段组件用来表示数据表中的字段特征,如数据类型和字段大小。它也用于表示字段的显示特征如排列对齐方式、显示格式和编辑格式等。当在数据集的记录之间滚动时,字段组件将更新当前字段的值,并可以被调用相应的属性和方法来显示给用户。1.常用属性(1〕FieldName属性FieldName属性用于指定字段对象和数据库中的哪个实际字段相对应,该属性值表示字段的实际名字。(2〕ReadOnly属性ReadOnly属性用来设置字段是否为只读,当属性值为True时字段只能读取不能修改;当ReadOnly属性值为False时,该字段可被读写。(3〕Caculated属性Caculated属性用于说明字段是否为计算字段,默认值为False。当属性值为True时表示该字段为计算字段,字段值需要通过计算得到。2023/2/3.10.3数据集组件DataSet2.字段的访问方式有两种方式可以访问当前记录的字段值:(1〕使用属性Fields[i]访问当前记录,Fields[i]是按照字段的顺序来访问的。每一个字段对象对应于数据库表中的一个字段,数据集的所有字段对象存在于属性Fields列表中,Fields列表中的字段对象就像数组元素一样拥有自己的索引号,可以用这个索引号来访问字段对象,索引号从0开始〔表示表中最左边一列),依次递增。代码Query1.Fields[0].DisplayLabel:=’第一列’;访问与Query1相连的数据库表中的第一个字段,并为该字段设置标题“第一列”。(2〕使用方法FieldByName按照字段的名字来访问,如显示studentinfo表中Name属性值只需要使用代码Edit1.text:=Table1.FieldByName(‘Name’).AsString;即可2023/2/3.10.4BDE数据集组件Table组件Table组件和Query组件继承自数据集组件,位于工具栏的BDE选项卡,使用Table组件,主要是用来连接数据库的。它即可以在设计阶段通过对象检视器设定其属性值实现与数据库的连接,也可以在程序运行过程时通过代码动态指定连接的数据库。设定Table组件,首先要设置它的DatabaseName属性,即说明当前数据集的来源。通常该属性设置为BDE中的数据库别名,然后设置TableName属性,它是用来说明Table组件所对应的是数据库中的哪一张表格。这两个属性是Table组件中最基本、最重要的属性。如果要实现与数据库的高级连接,如对记录进行过滤等还要用到其它的属性和方法。2023/2/3.10.4BDE数据集组件Query组件Query是一个封装了SQL语句,专门用于对数据库中的数据进行查询的组件。Query组件可以一次访问数据库中的一个或多个表格,而Table组件一次只能访问一个表。Query组件访问的表格可以是在远程服务器的数据库中,也可以是当地的表格。Query组件和Table组件同属于数据集组件,继承了数据集组件的属性、方法和事件。其最大的不同在于Query支持SQL,可以利用SQL的灵活性,因此它比Table更适合于高效的处理数据库的资源。Query和Table组件都是通过BDE数据库引擎来访问数据的,如果要访问SQL数据库,BDE会把Table命令转换为SQL语句,而Query相对简单,只要把整理过的SQL属性值传给数据库就可以了。2023/2/3.10.4BDE数据集组件Database组件数据库组件〔Database〕属于BDE组件,适用于以BDE方式与数据库进行连接。在数据库开发过程中,代表了应用程序所要访问的数据库,它的主要用途是控制数据库事务和进行缓存更新。如果在设计应用程序时没有手工加入一个数据库组件〔大部分情况都如此),程序会根据数据集组件的DatabaseName属性自动创建一个临时数据库组件,当应用程序和数据库断开连接后〔比如程序运行结束),这个临时的数据库组件自动被清除。反之,如果在设计初期手工加入一个数据库组件,则这个组件的DatabaseName属性指定程序要访问的数据库,手工加入的数据库组件是永久组件,即使程序运行结束也不会被清除。2023/2/3.10.4BDE数据集组件其他BDE组件1.StoredProc组件StoredProc组件与Query组件、Table组件一样,属于数据集组件。StoredProc组件是用来完成数据库服务器上的存储过程的。当一个应用程序必须在一个远程服务器的数据库中进行存储操作时,就会用到StoredProc组件。一个存储过程是一系列存储在服务器上的经过优化的SQL语句。存储过程执行与数据库相关的重复性任务并将结果传递给用户。值得注意的是并不是所有的数据库服务器都支持存储过程。使用存储过程可以提高数据库应用程序的效率,具体体现在:(1〕充分利用服务器的处理能力和处理速度;(2〕因为处理过程在服务器上进行,减少了网络传输的工作量;(3〕存储在服务器上的存储过程是经过优化的,执行起来更快。2023/2/3.10.4BDE数据集组件2.数据库连接〔Session〕组件数据库连接〔Session〕组件主要用于在多线程的数据库应用程序中管理数据库的连接,Session组件通常很少用,只有在对数据库进行高级操作时才用到,其作用主要体现在以下几个方面:(1〕管理BDE别名。可以用会话期对象创建、删除、修改数据库的BDE别名;(2〕在两层的数据库应用程序中控制数据库的连接;(3〕在单层的数据库应用程序中对Paradox和dBase提供口令保护。即可以显示对话框让用户输入口令也可以在程序中提供口令〔4〕指定BDE网络控制文件PDOXUSERS.NET和存放私有文件的目录。Session组件不能被显式的创建,也无法观察到它。Delphi自动的为数据库应用程序创建一个默认的Session组件,在应用程序运行时通过使用它的属性、方法和事件来控制这个默认的Session组件。2023/2/3.10.5ADO组件ADOConnection组件ADOConnection组件是用来建立、维持一个与ADO数据源之间连接。用户在访问ADO数据源中的数据前,首先要建立与ADO数据源建立连接。虽然可以使用ADOTable或者ADOQuery组件与ADO数据源建立连接,但是这种连接只是为一个特定组件服务的。这时可以使用ADOConnection组件关联以共享连接。ADOConnection组件相对于这些组件来说相当于一个数据库别名,如果后台数据库发生变化,只需改变ADOConnection组件的属性就可以了。2023/2/3.10.5ADO组件ADODataSet组件ADODataSet组件是最常用的ADO数据集组件之一,它具有从一个或多个ADO数据表中找到结果数据集的功能。1.ADODataSet组件的常见属性(1〕ConnectionString属性ConnectionString属性用于设置建立连接的字符串,其设置方法和ADOConnection组件完全一致,请参见10.5.1节。如果不设置ConnectionString属性,可以设置Connection属性关联ADOConnection组件。(2〕CommandText属性CommandText属性用于指定ADODataSet组件的数据集,可以指定一个数据表格或者SelectSQL语句。这里只能为Select语句,ADODataSet组件不能使用数据操纵语言〔如Insert、Update、Delete),因为数据操纵语言不返回数据结果。如果要使用数据操纵语言可以使用ADOQuery组件。2023/2/3.10.5ADO组件ADOTable、ADOQuery和ADOStoredProc组件在Delphi的ADO组件中,除了提供数据集组件ADODataSet外,还提供了ADOTable组件、ADOQuery组件和ADOStoredProc组件,这四个组件的功能几乎是一样的,都通过ADO的RecordSet对象来执行内部的工作。封装ADOTable组件、ADOQuery组件和ADOStoredProc组件的主要目的是让原来熟悉BDE的开发人员能够快速的使用ADO组件。不同点主要在于:(1〕ADOTable、ADOQuery和ADOStoredProc组件通过ADO与数据库相连,而Table、Query和StoredProc组件通过BDE连接数据库;(2〕ADOTable、ADOQuery和ADOStoredProc组件除了具有与Table、Query和StoredProc组件相同的、用于访问数据库数据的属性和方法外,还有用于建立组件与ADO数据库之间连接的属性和方法,如Connection、ConnectionString、CommandText、ConnectionType等。2023/2/3.10.6数据控制组件DBGrid组件在前面的讲解中一直在使用DBGrid组件,DBGrid组件以表格形式显示数据集中的数据,并像一般电子表格一样,允许用户操作表格中的数据,对其进行编辑。在窗体中放置一个DBGrid组件来显示和编辑一个数据集中的记录,应用程序可以通过该组件来插入、修改和删除数据集中的数据,或者将ReadOnly设置为True,仅仅供用户浏览。2023/2/3.10.6数据控制组件DBNavigator组件DBNavigator组件是用来在数据集中浏览和编辑数据的,它由一组控制按钮组成。使用该按钮可以向前或向后移动记录指针,可以使用该组件对单条记录进行编辑,还可以用它来插入、删除记录以及取消操作。DBNavigator组件一般与其它数据控制组件一起使用。当用户使用DBNavigator组件中的按钮时,与此DBNavigator组件相连的数据集会发生相应的变化。例如当用户选择了其中的Insert按钮,数据集中将被插入一条空的新记录。而当用户选择了移动记录的按钮,相当于调用了数据集中First、Prior、Next、Last方法,数据集中的记录指针也会随着发生移动。2023/2/3.10.6数据控制组件其他DataControl组件1.DBText组件DBText组件是用来显示数据集里当前记录中一个特定字段的值的数据控制组

温馨提示

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

评论

0/150

提交评论