第9章数据库编程9.1Delphi数据库系统概述9.2数据库引擎管理器9.3连接ODBC数据库补充:认识ADO补充:BDE连接数据库结构图补充:Delphi数据库体系结构补充:Delphi数据库连接9.4数据库桌面系统9.5数据集控件补充:创建主/从数据表界面补充:TField组件及其使用补充:TBatchMove组件及其使用9.6数据控制控件9.7DecisionCube控件9.8报表控件总结:企业多层应用系统框架图综合举例(详见《Delphi深度编程及其项目应用开发》)B/S结构软件开发概述和举例本章要点本章要点Delphi应用程序如何通过BDE或ADO和数据库相连,BDE如何通过ODBC设置。数据库桌面系统DatabaseDesktop。数据集控件的使用。数据控制控件的使用。Delphi的图表显示及报表打印。9.1Delphi数据库系统概述数据库系统主要由如下三部分组成:(1)数据库管理系统即DBMS(DataBaseManagementSystem),它是专门负责组织和管理数据信息的软件,如SQLServer2000等;(2)数据库应用程序,利用它能够获取、显示和更新由DBMS存储的数据,如利用Delphi开发的应用软件;(3)数据库,即按一定结构组织在一起的相关数据的集合。9.2数据库引擎管理器9.2.1BDE简介9.2.2数据库引擎管理器的功能9.2.1BDE简介BDE具有以下一些特点:Ø为Delphi应用程序访问各种数据库提供了一致的接口。Ø通过BDE访问任何一种格式的数据库,用户不必修改程序代码,只需在BDE中设置新的数据库参数即可。ØBDE非常适合开发大型的客户机/服务器应用程序。Ø如果要让BDE能访问一个新的数据库,只要在系统中安装新数据库的BDE驱动程序或者ODBC驱动程序就可以了。ØBDE是32位的数据库引擎,支持多线程和有优先级的多任务处理,多个应用程序可以同时运行并访问同一个数据库。9.2.2数据库引擎管理器的功能运行BDE(BorlandDatabaseEngine)管理器的两种方法:Delphi子菜单控制面板BDE管理器的界面(四个按钮、目录树)BDE管理器的主要功能1、数据库别名的管理2、驱动程序的管理3、系统配置9.3连接ODBC数据库1、ODBC(OpenDataBaseConnectivity),意思为开放数据库连接。2、通过ODBC设置数据库链接,打开Windows的控制面板,双击“ODBCDataSource(32bit)”举例说明ODBC链接:通过ODBC设置Access数据库链接;通过ODBC设置VisualFoxPro数据库链接;通过ODBC设置SQLServer数据库链接。补充:认识ADO1、ADO简介ADO(ActiveXDataObjects):是一座连接应用程序和OLEDB的桥梁(API)。目前有多种程序设计语言支持ADO。支持远程数据服务(RDS)2、ADO应用程序的配置ApplicationADOWebServerApplicationOLEDBODBCODBCDataSourceOLEDBDataSource9.4数据库桌面系统9.4.1DatabaseDesktop概述9.4.2设定工作目录和私有目录9.4.3创建数据库表9.4.4数据库表的属性9.4.5创建SQL类型数据表9.4.6在DatabaseDesktop中使用查询补充:SQLExplorer的使用9.4.1DatabaseDesktop概述DatabaseDesktop中主要有三种类型的窗口:•表窗口•查询窗口•SQL编辑器9.4.2设定工作目录和私有目录1.设置工作目录指在打开或者保存文件时,DatabaseDesktop首先用来寻找文件的地方。例如,我们将工作目录设置为d:\db。2.设置私有目录是用户自己使用的目录,在网络上的其他用户看不到这个目录。例如,我们将私有目录设置为d:\priv_db。9.4.3创建数据库表(1)依次单击“File”→“New”→“Table”选项,则会出现选择数据库表类型对话框,如图15所示。(2)单击“OK”,则会出现如图16所示的对话框。(3)定义字段,在Size列中输入字段的宽度。(4)单击“SaveAs”按钮,将定义好的数据表保存为student.db,,如图17所示。9.4.4数据库表的属性1.有效性检验属性(ValidityCheck)2.参照完整性属性(TableLookup)3.第二索引属性(SecondaryIndexes)4.引用完整性属性(ReferentialIntegrity)5.数据表的密码属性(PasswordSecurity)6.数据表语言驱动程序属性(TableLanguage)如图18∽23所示。9.4.5创建SQL类型数据表依次单击“File”→“New”→“Table”选项,在数据表类型对话框中选择“INTERBASE”选项,则生成创建SQL类型的数据表对话框,如图24所示。索引的定义是通过单击对话框右边的“DefineIndex…”按钮,打开定义索引对话框,如图25所示。在完成索引定义之后,要为索引命名,单击“OK”按钮,出现如图26所示的对话框。9.4.6在DatabaseDesktop中使用查询DatabaseDesktop提供了两种查询工具,即SQL语句和QBE。1、SQL语句查询依次单击“File”→“New”→“SQLFile”选项,打开一个新的SQL语句窗口,如图27所示。单击SQL菜单下的“SelectAlias…”选项,将出现设置数据库别名对话框,如图28所示。该SQL语句的执行结果如图29所示,在输出窗口中给出了student.db数据表中的所有数据。2、QBE查询依次单击“File”→“New”→“QBEQuery…”选项,QBE的查询窗口如图30所示则打开查询属性对话框,如图31所示,单击工具栏中的“显示SQL语句”(ShowSQL)按钮,可以看到DatabaseDesktop自动生成的SQL语句,如图32所示。单击“执行”(RunQuery)按钮执行QBE查询,执行结果如图33所示。9.5数据集控件9.5.1数据访问控件简介9.5.2数据集控件及其应用9.5.3TTable控件及其使用9.5.4TQuery控件及其使用9.5.5TDataSource控件及其使用Delphi中BDE连接数据库结构图Delphi应用程序DatabaseDesktopBDEUtilitiesBorlandDatabaseEngine(BDE)dBASEParadoxFoxPro本地数据库InterbaseForwindows远程数据库SQLServer,Oracle,SybaseInformix,InterbaseDB2SQLLinksODBCDrivers客户/服务器数据库接口本地型数据库接口窗体数据模块应用程序Paradox、FoxPro等本地数据库窗体数据模块应用程序SQLServer、Oracle、DB2、Sybase等数据库服务器1、单层结构的数据库应用程序2、两层结构的数据库应用程序3、多层结构的数据库应用程序窗体数据模块客户端应用程序数据库服务器远程数据模块应用服务器BDE或ADOBDE或ADO远程数据库BDE或ADOSQLServer、Oracle、DB2、Sybase等远程数据库1、基于BDE的数据库连接(使用Table、Query控件,使用Database控件)2、基于ODBC的数据库连接(使用Table、Query控件,使用Database控件)Database控件的连接,可以避免每次的登录窗口,右键编辑登录名和密码,人工起名DatabaseName。3、基于ADO的数据库连接ADO(ActiveXDataObject的简称),也称为OLEDB。下图为ADO控件页。数据库Database控件Table或Query控件DataSource控件窗体控件9.5.1数据访问控件简介BDE控件栏DataAccess控件栏ADO控件栏9.5.2数据集控件及其应用1.数据集控件的状态非活动状态(Inactive)浏览状态(Browse)编辑状态(Edit)插入状态(Insert)查找状态(SetKey)处理计算字段状态(CalcFields)BrowseInsertSetkeyInactiveEditCloseOpenInsertAppendPost(成功)DeleteSetkey*CancelCancelDeletePost(成功)EditPost(不成功)Post(不成功)各种状态的转换关系图(补充)(1)打开数据集:①Active属性:=True②执行Open方法例如:Table1.Active:=True;Query1.Active:=True;或:Table1.Open;Query1.Open;(2)关闭数据集:①Active属性:=False②执行Close方法例如:Table1.Active:=False;Query1.Active:=False;或:Table1.Close;Query1.Close;2.数据集的打开和关闭通过属性通过方法3.数据集的浏览表1数据集的浏览方法方法功能First移动记录指针到数据集中的第一条记录Next移动记录指针到数据集中的下一条记录Prior移动记录指针到数据集中的前一条记录Last移动记录指针到数据集中的最后一条记录MoveBy(n)n是正,将记录指针下移n条记录;否则,上移n条记录表2数据集的浏览属性属性功能BOF当记录指针位于数据集开头时,属性值为True,否则为FalseEOF当记录指针位于数据集结尾时,属性值为True,否则为False4.数据集中的数据维护(1)表3数据集中数据维护的方法方法功能Edit将数据集置为编辑状态Append保存所有被修改的记录,然后将记录指针移到表中的最后一条记录,且将数据集置为插入状态Insert保存所有被修改的记录,将数据集置为插入状态Post将插入或者被修改的记录写回到数据表,当保存成功时数据集回到浏览状态,若保存不成功则数据集恢复原来状态方法功能Cancel取消当前的操作且将数据集置为浏览状态Delete删除当前记录指针所在的记录且将数据集置为浏览状态AppendRecord在数据表的最后插入一条新记录,记录的各个字段值作为AppendRecord的参数传递给新记录InsertRecord在当前指针所在记录的后面插入一条新记录,记录的各个字段值作为InsertRecord的参数传递给新记录。SetFields修改当前记录,字段名和相应的字段值作为SetFields的参数4.数据集中的数据维护(2)有关书签操作,Delphi提供了三个方法:GetBookMarkGotoBookMarkFreeBookMark例如书签的使用(下图):5.数据集的书签数据集控件具有三个方法,用于控制数据集控件和与其相连的数据控制控件之间的连接,以及控制数据控制控件的显示。它们是:DisableControls方法EnableControls方法Refresh方法6.数据集控件与数据控制控件的连接ØBeforeOpen/Afteropen在数据集控件打开之前/之后被触发。ØBeforeClose/Afterclose在数据集控件关闭之前/之后被触发。ØBeforeInsert/AfterInsert在数据集控件进入插入状态之前/之后被触发。ØBeforeEdit/AfterEdit在数据集控件被编辑之前/之后被触发。ØBeforePost/AfterPost在数据集控件保存被修改的记录之前/之后被触发。⒎数据集控件的事件(1)ØBeforeCancel/AfterCancel在数据集控件取消进一步操作之前/之后被触发。ØBeforeDelete/AfterDelete在数据集控件删除当前记录之前/之后被触发。ØOnNewRecord当建立一条新记录时被触发。ØOnCalcFields当为表