1 / 96

Delphi 实用教程

Delphi 实用教程. 第 9 章 数据库应用程序开发. 9.1 数据库应用系统的开发过程. 通常开发数据库应用程序有以下三个阶段: 分析阶段。明确应用程序需做什么及需要什么数据、谁将使用这些数据。 设计阶段。确定数据表的形式和所需的程序块,编写为了实现设计中的功能的程序代码。 维护阶段。对应用程序进行维护,根据用户使用情况进一步优化应用程序。 利用 Delphi 进行客户机 / 服务器数据库应用系统的开发,通常按以下步骤进行: 系统总体设计与规划。 网络和 SQL 服务器建设。 数据库设计。 前端开发。 调试与应用程序的发布。.

hasad
Download Presentation

Delphi 实用教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Delphi实用教程 第9章 数据库应用程序开发 第9章 数据库应用程序开发

  2. 9.1数据库应用系统的开发过程 • 通常开发数据库应用程序有以下三个阶段: • 分析阶段。明确应用程序需做什么及需要什么数据、谁将使用这些数据。 • 设计阶段。确定数据表的形式和所需的程序块,编写为了实现设计中的功能的程序代码。 • 维护阶段。对应用程序进行维护,根据用户使用情况进一步优化应用程序。 • 利用Delphi进行客户机/服务器数据库应用系统的开发,通常按以下步骤进行: • 系统总体设计与规划。 • 网络和SQL服务器建设。 • 数据库设计。 • 前端开发。 • 调试与应用程序的发布。 第9章 数据库应用程序开发

  3. 9.2 试题库管理系统的设计实例9.2.1 创建stkgl(试题库管理)数据库 • 创建包含试题信息表和试卷信息表,结构分别如下两表所示。 试题信息表(表名st) 第9章 数据库应用程序开发

  4. 9.2.1 创建stkgl(试题库管理)数据库 试卷信息表(表名sj) 第9章 数据库应用程序开发

  5. 9.2.2建立存储过程 • 编写试题库管理系统中使用的试卷生成存储过程。 思路: 根据试卷信息表(sj)的试卷编号(sjbh),查找到相应 记 录的试卷内容。根据试卷内容(sjnr),创建一个新的试 卷 表(paper)。试卷表(paper)包含两个字段:题型代码 (txdm)和题目内容(tmnr)。代码如下: 第9章 数据库应用程序开发

  6. 9.2.2建立存储过程 CREATE PROCEDURE sjsc @sjbh tinyint AS DROP TABLE paper; CREATETABLE paper(txdm tinyint,tmnr text); DECLARE @i int; SET @i=-3; WHILE @i<40 BEGIN SET @i=@i+4; INSERT INTO paper(txdm,tmnr) SELECT txdm,tmnr from st WHERE th IN (SELECT substring(sjnr,@i,3) FROM sj WHERE sjbh=@sjbh) end; 第9章 数据库应用程序开发

  7. 9.2.2建立存储过程 • 说明: 该存储过程的功能是把符合条件的题型代码(txdm)和题目 内容(tmnr),插入paper表中,paper表即为生成的试卷。 Where条件子句使以下的select语句所产生的题型代码 (txdm)和题目内容(tmnr)所对应的题号(th)必须在sj 表中试卷内容(sjnr)中。 select txdm,tmnr from st where th in (select substring(sjnr,@i,3) from sj where sjbh=@sjbh) 第9章 数据库应用程序开发

  8. 9.2.2建立存储过程 因为sj表中sjnr存放的是以逗号分割的试题编号,所以通过把试题编号提取出来,逻辑上构成了一个试题编号的集合。并通过以下的Where子句产生符合条件的题号(th)所对应的试卷内容(sjnr)。 where th in (select substring(sjnr,@i,3) from sj where sjbh=@sjbh) 局部变量@i,控制从sj表中试卷内容(sjnr)中选取试题的数量。最后,返回生成的试卷给客户端程序。 第9章 数据库应用程序开发

  9. 9.2.3 用户界面设计 • 用户界面设计应根据用户的要求进行,不同的用户有不同的要求。通常,下面的原则具有一定的普遍意义。 (1)力求界面美观大方,避免界面布局过分拥挤,一般来说, 按钮不应太多,如果按钮过多,可以考虑用菜单替代。 (2)颜色选择不应过多,尽量保持与操作系统或运行应用程序 的背景相协调。尤其没必要追求过分鲜艳的界面。 (3)最好提供友好的中文界面。 (4)要充分考虑到与用户的交互性,在后台执行的应用程序可 以通过提供一个进度条方式给用户一个直观的认识。 (5)最好能提供一定的提示信息,用以引导用户操作。 (6)要充分考虑到用户的误操作的可能性,对敏感的信息提供 一定的保护措施。比如对删除数据库中的记录,最好提供 确认对话框,让用户确认是否删除记录,以减少误操作造 成数据丢失。 第9章 数据库应用程序开发

  10. 9.2.3 用户界面设计 • 有几种典型界面风格: (1)简洁型 简洁型用户界面 第9章 数据库应用程序开发

  11. 9.2.3 用户界面设计 (2)典雅型 典雅型用户界面 第9章 数据库应用程序开发

  12. 9.2.3 用户界面设计 (3)明了型 明了型用户界面 第9章 数据库应用程序开发

  13. 9.2.4 C/S数据库应用程序设计 • “试题库管理系统”的系统结构 “试题库管理系统”应用程序的结构设计如图所示: 第9章 数据库应用程序开发

  14. 9.2.4 C/S数据库应用程序设计 2. 建立数据模块DMSTK Ⅰ 新建一个数据模块DataModule1(最终保存该数据模块单元为DMUStk),如图所示,该数据模块所包含的组件及其属性设置值如下张表所示。 数据模块DMSTK 第9章 数据库应用程序开发

  15. 9.2.4 C/S数据库应用程序设计 数据模块组件对象属性表 第9章 数据库应用程序开发

  16. 9.2.4 C/S数据库应用程序设计 Ⅱ使用字段编辑器把QryTMNR,DSetSJ,TabST组件中的所有字 段设置为永久字段,再设置这些永久字段的DisplayLabel属性, 以便于阅读。 Ⅲ DMstk数据模块保存了对试题库的ADO连接、数据集、存储过 程及查询等信息。利用属性编辑器生成ConStk的连接字符串 (ConnectionString),步骤如下: ● 首先, 鼠标双击ConStk,弹出设置连接属性对话框,选择其 中的“Use Connection String”单选框,单击“Build…”按钮, 系统将弹出“数据链接属性”对话框。 ● 其次,本例中,将访问基于Microsoft SQL Server的数据库, 因此选择“Microsoft OLE DB Provider for SQL Server” 选项,选择完毕后单击“Next>>”按钮。 第9章 数据库应用程序开发

  17. 9.2.4 C/S数据库应用程序设计 ● 第三,选择连接属性,这个界面上要求选择的内容较多。 需根据SQL Server数据服务器的设置来定。本例中按以下 步骤进行设置: (1)单击“选择或输入服务器名称”下拉列表框的下拉按钮,显 示当前系统可以访问的SQL服务器的列表,选择其中的一 个,单击“Refresh”按钮,获得最新的SQL服务器列表。本 例SQL服务器名为cjhdb,如图所示。 第9章 数据库应用程序开发

  18. 9.2.4 C/S数据库应用程序设计 (2)在“登录服务器的信息”中,输入相应SQL Server数据服务 器的登录信息。本例以系统管理员sa身份登录计算机。 (3)选中“选择数据库”单选框,单击其列表框的下拉按钮,如 果在第(2)步输入的登录信息正确,则会显示在第1步选 择的SQL Server数据服务器中数据库的列表,否则系统就 会显示出错提示。设置完后,单击“Test Connection”按钮 测试输入的登录信息是否正确。 (4)单击“确定”按钮,连接字符串设置完毕(如图)。单击OK 按钮返回。 第9章 数据库应用程序开发

  19. 9.2.4 C/S数据库应用程序设计 3. 主窗体设计 试题库管理系统具有试题维护、试卷生成和维护等功能,设计的主界面如图所示。试题库管理系统主窗体所包含的组件及其属性值列于表中 试题库管理系统主窗体 试题库管理系统主窗体和组件对象属性表 第9章 数据库应用程序开发

  20. 9.2.4 C/S数据库应用程序设计 程序代码如下: // 引用stwh, sjwh, sjsc三个单元。 // 可以手工写入,也可以在完成模块单元后,使用File->Use Unit命令。 uses stwh, sjwh, sjsc; // 按钮BtnSTWH的OnClick事件代码,用于调用“试题维护”窗体。 // 其它两个按钮BtnSJWH、BtnSJSC的OnClick事件代码与它类似。 procedure TFrmMain.BtnSTWHClick(Sender: TObject); begin FrmSTWH.ShowModal; end; 保存该单元为main,保存项目为StkPrj。 第9章 数据库应用程序开发

  21. 9.2.4 C/S数据库应用程序设计 4. 试题维护窗体 试题维护窗体主要用于试题和答案的输入和修改,其界面如图所示,试题维护窗体所包含的组件及其属性值列于表中。 在程序的实现部分要引用数据模块单元DMUSTK,即使用语句: uses DMUSTK; 通过从数据模块DMStk中拖拽永久字段TabSTtmnr、TabSTckda获得 试题维护窗体和组件对象属性表 试题维护窗体 第9章 数据库应用程序开发

  22. 9.2.4 C/S数据库应用程序设计 5. 试卷维护窗体 试卷维护窗体主要用于试卷内容和评价等信息的输入和修改,其界面如图所示。其中的组件对象属性表及源程序与试题维护窗体及程序类似。 试卷内容为三位数,以逗号分开 通过从数据模块DMStk中拖拽永久字段DSetSJsjnr、DSetSJjspj获得 试题维护窗体 第9章 数据库应用程序开发

  23. 9.2.4 C/S数据库应用程序设计 6. 试卷生成窗体 试卷生成窗体主要用于显示试卷内容,其界面及结构分别如图所示,该窗体所包含的组件及其属性见下表。 试卷生成窗体 窗体结构 第9章 数据库应用程序开发

  24. 9.2.4 C/S数据库应用程序设计 试卷生成窗体和组件对象属性表 第9章 数据库应用程序开发

  25. 9.2.4 C/S数据库应用程序设计 程序代码如下: // 在程序的实现部分引入以下三个单元 uses DMUStk, dysj, DMUStkDy; // 窗体FrmSJSC的OnHide事件代码。 procedure TFrmSJSC.FormHide(Sender: TObject); begin DMSTK.QryTMNR.Active:=false; MenSJ.Lines.Clear; end; 第9章 数据库应用程序开发

  26. 9.2.4 C/S数据库应用程序设计 // 菜单项MIDY的OnClick事件代码。用于打印试卷。 procedure TFrmSJSC.MIDYClick(Sender: TObject); begin { 重新打开数据集,获得最新的数据。这里只列出了QryXZ组件的代码,其它的组件QryTK、QryPD、QryJD、QryJS、QryLS、QryWD、QryBC的代码从略。} DMStkDy.QryXZ.Active:=false; DMStkDy.QryXZ.Active:=true; ...... // 下面四条语句根据试卷编号,获得试卷名。 // 用于在打印出的试卷卷头中加入试卷名。 DMStkDy.QrySJM.Close; DMStkDy.QrySJM.Parameters.ParamByName('bh').Value:= strtoint(EdtSJBH.Text); DMStkDy.QrySJM.Open; FrmDY.RvProSJ.Execute; //打印试卷 end; 第9章 数据库应用程序开发

  27. 9.2.4 C/S数据库应用程序设计 // 菜单项MIExit的OnClick事件代码。 procedure TFrmSJSC.MIExitClick(Sender: TObject); begin FrmDY.Close; end; 第9章 数据库应用程序开发

  28. 9.2.4 C/S数据库应用程序设计 // 按钮BtnSJSC的OnClick代码。调用存储过程。 procedure TFrmSJSC.BtnSJSCClick(Sender: TObject); begin MenSJ.Lines.Clear; // 执行存储过程,按试卷编号生成试卷。 DMSTK.SPSJSC.Parameters[1].Value:=strtoint(EdtSJBH.Text); DMSTK.SPSJSC.ExecProc; DMSTK.QryTMNR.Close; DMSTK.QryTMNR.Open; with DMSTK do// 在 Memo1中显示试卷内容 begin QryTMNR.Active:=true; QryTMNR.First; while not QryTMNR.Eof do begin MenSJ.Lines.Append(QryTMNRtmnr.AsString); QryTMNR.Next end; end; end; 第9章 数据库应用程序开发

  29. 9.2.4 C/S数据库应用程序设计 试题库管理系统的主要窗体都已设计完成,只有与打印相关的数据模块DMStkDy和试卷打印窗体FrmDy尚未设计,将在9.4节讨论。程序的运行结果如图所示。 第9章 数据库应用程序开发

  30. 9.2.4 C/S数据库应用程序设计 6. 使用项目管理器对项目StkPrj进行管理 (1)选择主菜单下的FileOpen Project,打开项目StkPrj。 (2)选择主菜单下的 ViewProject Manager 菜单命令,弹出 Project Manager对话框, 如图所示。通过项目管理 器的树状结构和弹出式菜 单,可以很方便地管理项 目StkPrj。 项目StkPrj 第9章 数据库应用程序开发

  31. 9.2.4 C/S数据库应用程序设计 (3)选择主菜单下的ProjectOptions命令,弹出Project Options对话框,选择Forms页。Forms页用来设置应用程序 的主窗体以及选择哪些窗体被系统自动创建、哪些窗体需用 户自己创建,项目StkPrj中的窗体如图所示。 第9章 数据库应用程序开发

  32. 9.2.4 C/S数据库应用程序设计 (4)选择主菜单的ProjectViewView Source命令,打开当前 项目文件StkPrj,可以查看该项目的源代码。下面的代码是 项目文件StkPrj中的内容。 program StkPrj; // 项目文件StkPrj uses Forms, main in 'main.pas' {FrmMain}, DMUStk in 'DMUStk.pas' {DMSTK: TDataModule}, stwh in 'stwh.pas' {FrmSTWH}, sjwh in 'sjwh.pas' {FrmSJWH}, sjsc in 'sjsc.pas' {FrmSJSC}, dysj in 'dysj.pas' {FrmDY}, DMUStkDy in 'DMUStkDy.pas' {DMStkDy: TDataModule}; {$R *.res} 第9章 数据库应用程序开发

  33. 9.2.4 C/S数据库应用程序设计 begin Application.Initialize; Application.CreateForm(TFrmMain, FrmMain); Application.CreateForm(TDMSTK, DMSTK); Application.CreateForm(TFrmSTWH,FrmSTWH); Application.CreateForm(TFrmSJWH,FrmSJWH); Application.CreateForm(TFrmSJSC, FrmSJSC); Application.CreateForm(TFrmDY, FrmDY); Application.CreateForm(TDMStkDy, DMStkDy); Application.Run; end. 第9章 数据库应用程序开发

  34. 9.3三层结构程序设计 • 三层结构指的是将用户界面、业务逻辑、数据管理三个层次部署在不同的位置上。 • 用户界面是客户端桌面上实现的功能 • 业务逻辑是在一个专门的应用服务器上实现的功能 • 数据管理是在一个专门的数据库服务器上实现的功能 • 三层结构的优势: • 瘦客户端结构 • 业务逻辑的集中封装 • 集中的资源管理 第9章 数据库应用程序开发

  35. 9.3.1 基于DataSnap的三层数据库应用概述 • 基于DataSnap的三层数据库图: 三层数据库应用的结构(基于BDE) 三层数据库应用的结构(基于ADO) 第9章 数据库应用程序开发

  36. 9.3.1 基于DataSnap的三层数据库应用概述 • 从图中可见三层数据库应用的结构与两层结构的区别在于:把原来集中在一台机器上的数据源和数据集组件分别放于网络中不同的机器上(有时也存放在一台物理机器上,但逻辑上仍属于三层结构),通过在应用服务器端增加供应器,在客户端增加连接组件和客户端数据集,使两者联系起来。 • 在一个三层应用中,客户端通过应用服务器得到数据和进行数据更新的过程,通常按照如下顺序和方式实现: (1)用户启动客户端应用。客户端连接到应用服务器(可以在 设计时或者运行时指定)。如果应用服务器尚未运行,它 将被启动。 (2)客户端从应用服务器请求数据。 (3)应用服务器从数据库服务器获取数据,为客户端打包数据, 返回一个数据包给客户端。额外的信息(例如,字段显示 特性),可以被包含在数据包的元数据中。这个将数据打 包的过程叫做“供应(providing)”。 (4)客户端解开数据包,显示数据给用户。 第9章 数据库应用程序开发

  37. 9.3.1 基于DataSnap的三层数据库应用概述 (5)当用户与客户端程序交互时,数据被更新(增加、删除或 修改记录)。这些改动被客户端记录在一个变更日志中。 (6)客户端向应用服务器提请更新(Apply Updates),通常是 响应用户的一个操作。为了提请更新,客户端将它的变更日 志打包并作为一个数据包发送给服务器。 (7)应用服务器解开数据包,并向数据库服务器递交更新(Post Updates)(如果需要,在一个事务的环境中)。如果一个 记录不能被递交(例如,由于另一个应用在客户端请求之 后、提请更新之前,改变了记录),应用服务器或者尝试用 当前数据调整(Reconcile)客户端的改变,或者保存不能 被提交的记录。这个提交记录和缓存问题记录的过程叫做 “解析(Resolving)”。 (8)当应用服务器完成解析过程,它返回没有递交的记录给客 户端,以供后来的进一步解析。 (9)客户端调整没有解析的记录。可以有多种方式,典型地, 客户端尝试更正阻碍记录被递交的情况,或放弃变化。如 果 错误的情况可以被修正,客户端再次提请更新。 (10)客户端从服务器得到数据刷新自己。 第9章 数据库应用程序开发

  38. 9.3.1 基于DataSnap的三层数据库应用概述 • DataSnap组件表 • 供应器和客户端数据集组件需要midas.d11或midaslib.dcu,它们管理作为数据包存储的数据集。由于供应器是用在应用服务器上,而客户端数据集用在客户端,所以如果使用midas.dll,则必须在应用服务器和客户端都要部署它。 第9章 数据库应用程序开发

  39. 9.4.2应用服务器结构 • 应用服务器的基础是一个远程数据模块(Remote Data Module),它是特殊的数据模块,支持IAppServer接口。 • 在一个远程数据模块中同样包含一个或者多个数据集组件,来代表数据库服务器上的记录。同样也包含某种数据库连接组件,用来让数据集与数据库服务器交互。 • 对于远程数据模块公布给客户端的每个数据集,必须有一个数据集供应器(DataSet Provider)。 第9章 数据库应用程序开发

  40. 9.4.3客户端应用结构 • 对于最终用户,三层应用中的客户端与一个使用缓存更新的传统两层应用看上去一样。用户的交互是通过标准的数据敏感组件,只是在这里,数据敏感组件从一个客户端数据集组件(ClientDataSet)得到数据进行显示。连接组件建立连接到应用服务器。通过一个连接组件,客户端数据集从一个供应器组件取回数据,并将更新提请给供应器。有多种的连接组件,使用各自不同的通信协议。对应于应用服务器上的不同种类的远程数据模块,在客户端需要使用不同种类的连接组件,如表所示。 第9章 数据库应用程序开发

  41. 9.4.4三层应用开发 • 开发三层数据库应用的主要工作过程如图所示。 第9章 数据库应用程序开发

  42. 9.4.4三层应用开发 • 下面建立一个三层数据库应用,包括一个应用服务器stkServer和一个客户端Client。应用服务器实现与数据库stkgl的连接。客户端通过应用服务器对数据库中的试题表进行修改。 1.建立应用服务器并注册 1)建立应用服务器 建立应用服务器的步骤如下: (1)选择菜单FileNew Application,新建一个应用。 (2)选择菜单FileNewOtherMultitierRemote Data Module,新建一个远程数据模块(如图),并 设定类名RDMstk,其他取默认值。 第9章 数据库应用程序开发

  43. 9.4.4三层应用开发 (3)选择一个ADOQuery组件,再从组件面板的Data Access页选择一个数据集供应器组件 DatasetProvider,放入到远程数据模块中远 程数据模 块RDMstk所包含的组件及其属性列于表中。 远程数据模块RDMstk的组件对象属性表 第9章 数据库应用程序开发

  44. 9.4.4三层应用开发 (4)设计应用服务器的主窗体。用于提示用户应用服务器 已经工作,如图9.21所示,只需放入一个Label组件, 修改其Caption为“正在运行……”。 (5)保存主窗体单元为stkServer,远程数据模块为 RDMUstk,保存项目为stk3Prj。 服务器端程序主窗体 第9章 数据库应用程序开发

  45. 9.4.4三层应用开发 2)注册和运行 (1) 选择主菜单RunParameters…,在Parameters栏中输 入“/regserver”,如图所示。 (2) 选择主菜单RunRun,运行应用服务器stk3Prj。 设置服务器运行参数 第9章 数据库应用程序开发

  46. 9.4.4三层应用开发 2.建立客户端应用 (1) 选择主菜单FileNew Application,新建一个应用。 (2) 从DataSnap页,选择一个DCOM连接组件DCOMConnection放 入到窗体中。通常要设置DCOMConnection组件的以下属性: ●ComputerName属性 该属性表明应用服务器所在的机器。若为空,表示应用服务器与 客户端应用在同一台机器。 ●ServerName属性 该属性指出应用服务器的组件类 名字(即服务器注册的名字)。 本例点击ServerName属性取值的 下拉列表,选择stk3Prj。 DCOM连接组件 第9章 数据库应用程序开发

  47. 9.4.4三层应用开发 (3) 从DataAccess页,选择一个客户端数据集组件ClientDataSet (命名为CDSStu),放入到窗体中。通常ClientDataSet组件需 设置的属性有: ●RemoteServer属性 用于指出DCOM连接。本例设置为为DCOMConStu。 ●ProviderName属性 用于指出应用服务器的数据集提供者。本例点击属性栏的 下拉列表,其中将有应用服务器中的数据集供应器的名 字DSProST,选中它,如图所示。 第9章 数据库应用程序开发

  48. 9.4.4三层应用开发 (4) 在窗体中放入其他相关的组件 第9章 数据库应用程序开发

  49. 9.4.4三层应用开发 客户端应用程序所使用的窗体和组件及其属性列于表中。 第9章 数据库应用程序开发

  50. 9.4.4三层应用开发 客户端程序代码如下: 按钮BtnXG的OnClick事件代码: procedure TFrmClient.BtnXGClick(Sender: TObject); begin CDSStu.ApplyUpdates(-1); end; 按钮BtnSX的OnClick事件代码 : procedure TFrmClient.BtnSXClick(Sender: TObject); begin CDSStu.Close; CDSStu.Open; end; 第9章 数据库应用程序开发

More Related