没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
多层数据库开发文档
第一章 设计数据库应用程序
数据库应用程序允许用户与存储在数据库中的信息进行交互。数据库提供了
信息的结构,供不同的应用程序共享。
Delphi 4 支持关系型数据库。关系型数据库以行和列即表格的形式来组织
信息。当您设计一个数据库应用程序的时候,必须了解数据的结构,这样才能设
计出一个合适的用户界面来显示数据库中的数据并且允许用户输入新的数据或者
修改已有的数据。
1.1 使用
数据库构件选项板的“Data Access”页上的构件用于读写数据库,这些构
件都借助于 BDE(Borland Database Engine)来访问数据库中的信息。
Delphi 4 的不同版本所包含的数据库驱动程序有所不同。不过,所有的版
本都包含了访问本地数据库的驱动程序,而 Client/Server 版本和 Enterprise
版本还 包含了 SQL Links 用于访问远程数据库。究竟使用本地数据库还是远程
数据库取决于几个方面的因素,例如,表格中要存储多少数据,有多少用户要同
时访问数据库,对数据库的性能有什么要求。
1.1.1 本地数据库和远程数据库
本地数据库位于本地磁盘或局域网上。如果有几个用户同时访问数据库,
本地数据库采取基于文件的锁定策略,因此,本地数据库又叫基于文件的数据库。
正因为本地数据库往往与数据库应用程序在同一个系统中,因此,访问本
地数据库的速度比访问远程数据库的速度要快。
本地数据库所能存储的数据没有远程数据库所能存储的数据多,在选择使
用本地数据库还是远程数据库时必须考虑到这一点。
使用本地数据库的应用程序也称为单层应用程序,因为数据库和应用程序
在同一个文件系统中。
典型的本地数据库有 Paradox、dBASE、FoxPro 和 Access。
远 程 数 据 库 通 常 位 于 远 程 计 算 机 上 , 用 户 通 过 SQL(Structured
QueryLanguage)来访问远程数据库中的数据,正是基于这个原因,远程数据
库有时候也叫 SQL 服务器或者叫 RDBMS(Remote Database Management
System)。
远程数据库非常适合于几个用户同时访问,与那些基于文件锁定策略的本
地数据库不同的是,远程数据库提供了基于事务的多用户支持。
远程数据库所能存储的数据也比本地数据库多得多,甚至有时候数据并不
在一个服务器上,而是分布在几个服务器上。
使用远程数据库的应用程序称为两层或多层应用程序,因为数据库和应用
程序位于彼此不依赖的系统(层)中。
典 型 的 SQL 服 务 器 有
Interbase、Oracle、Sybase、Informix、Microsoft SQLServer 和 DB2。
1.1.2 数据库的安全性
数据库往往包含了一些敏感信息。为了保护这些信息,不同的数据库有不
同的保护策略。有的数据库如 Paradox 和 dBASE,仅仅在表格级或字段级提供
了安全保护,当一个用户试图访问受保护的表格时,他必须输入口令。当口令被
认可,他只能看到允许的字段。
大部分 SQL 服务器需要用户输入用户名和口令,一旦用户成功地登录到服
务器,他所能看到的表格以及能进行的操作与他输入的用户名和口令有关。
当您设计一个数据库应用程序的时候,必须考虑到数据库服务器需要什么
样的安全措施。例如,如果不想让用户输入口令,您要么使用不需要口令的数据
库,要么在程序中就把用户名和口令提供好,不过,在程序中提供用户名和口令
容易泄密。
如果需要用户输入口令,还必须考虑什么时候输入口令。如果正在使用一
个本地数据库但希望将来能够平滑地过渡到一个大型的 SQL 数据库,最好在打
开一个表之前提示用户输入口令,尽管现在还可能用不着口令。
有的服务器可能需要多重口令,为了简化用户的操作,可以只要求用户输入
一个主口令,其余的口令由程序自动提供。
在多层的 Client/Server 应用程序中,可能要同时用到不同的安全模式,
例如,用 CORBA 或 MTS 控制访问中间层,再让中间层去处理登录到远程数据
库的细节。
1.1.3 事务
一个事务实际上是一组动作,这些动作必须在一个或几个表被提交之前成
功地执行。如果有某个动作执行失败,所有的动作都将滚回(Undo)。
大部分本地数据库不支持事务,但 BDE 驱动程序还是提供了有限的事务处
理能力。而 SQL 数据库和 ODBC 兼容的数据库本身就提供了处理事务的能力。
1.1.4 数据字典
不管使用本地数据库还是远程数据库,应用程序都有权访问数据字典。数
据字典提供了一个可自定义的不依赖于应用程序的存储区域,在这个区域中,可
以创建扩展的字段属性集和描述数据的内容和外观。
例如,如果要经常开发财务软件,可以创建几个特殊的字段属性集,以不
同的格式显示金额。当在设计期创建数据集时,就不需要用对象观察器手工设置
金额字段的显示格式,只要从数据字典中选择一个合适的属性集,让当前数据集
中的金额字段共享它的属性。使用数据字典能保证数据具有一致的外观。
在 Client/Server 环境下,数据字典可以位于远程服务器上。
位于...DELPHI4\LIB 目录中的 DRINTF 单元提供了访问数据字典的编程接口。
1.1.5 完整性验证、存储过程和触发器
所有的关系数据库都提供了存储和操作数据的功能。此外,有些数据库还
提供了有助于保证数据完整的功能。
一是完整性验证。这个功能提供了一种机制,能够防止两个表之间的
Master/Detail 关系被打断。当用户试图删除 Master 表中的一个字段时,如果
这个字段被删掉将导致 Detail 表中出现孤立的记录,完整性验证功能要么不允
许删除这个字段,要么把孤立的记录删掉。
二是存储过程。存储过程实际上是一组 SQL 语句,它们放在 SQL 服务器
上,这些 SQL 语句能够执行与数据库相关的任务,然后返回执行结果(记录集)。
三是触发器。触发器也是一组 SQL 语句,这些语句将在响应某个命令时被触发
执行。
1.2 数据库应用程序的体系结构
一个数据库应用程序在逻辑上通常由两部分组成:一是数据库访问链路,
二是用户界面,这就是数据库应用程序的体系结构。
1.2.1 选择合适的体系结构
建议最好把实现数据访问链路的构件与实现用户界面的构件分开,凡是数
据访问构件最好放在数据模块上,这样能够保证应用程序具有一致的用户界面。
如果把设计好的数据模块和窗体加到对象库中,在创建一个新的数据库应用程序
时就不必什么都从头开始,这样不但能够提高编程效率,而且能够保证程序具有
一致的风格。
数据库应用程序的体系结构取决于是使用本地数据库还是远程数据库,取
决于同时访问数据库的用户数以及数据库中需要存储哪些类型的信息。
如果数据库中的信息不需要在几个用户之间共享,建议使用本地数据库,
可以获得较快的访问速度,而且不必购买昂贵的服务器。不过,本地数据库所能
存储的数据容量是有限的。
如果需要存储很多的信息,最好改用远程数据库。不过,两层的体系结构
需要 SQL Links 的支持 ,而 SQL Links 只 有 Delphi 4 的 Client/Server 和
Enterprise 版本中才包含有。
如果表与表之间的信息存在着比较复杂的关系,或者用户的数量增加了,
建议您考虑多层的体系结构。与两层的应用程序相比。多层的应用程序多了一个
中间层,中间层用于集中处理应用逻辑,这样,不同用途的客户程序可以使用相
同的数据并且保证数据逻辑是一致的。同时,客户程序可以做得比较小巧,因为
相当大的一部分工作由中间层去做了,这就是所谓的“瘦”客户。“瘦”客户更容易
安装、配置和维护,因为它不需要包含数据库访问链路,不需要 BDE。用多层
的体系结构还有个好处是,可以把数据处理的任务分布在几个不同的系统中完成。
当然,只有 Client/Server 和 Enterprise 版本才支持多层的体系结构。
不过,层数越多,开发难度和费用就越大,因此,开发数据库应用程序时,
最好先从单层开始,随着数据和用户的增加,再逐步平滑地过渡到多层体系结构。
这里的关键是,一开始就要考虑到体系结构的可伸缩性,以最大限度地重用代码,
使用以前的投资。
1.2.2 可伸缩性
BDE 的结构以及数据模块的使用使可伸缩性成为可能。不管是单层、两层
还是多层,都可以把用户界面与数据访问链路分开,如图 1.1 所示
其中,窗体主要用于实现用户界面,它的主要部件是数据控件。数据模块主
要用于实现数据访问链路,换句话说,就是引入数据集。数据集与数据控件之间
通过 TDataSource 构件连接。把用户界面与数据访问链路分开的好处是,当应
用程序以后过渡到多层体系结构时,只有数据模块上的数据集构件需要修改,而
用户界面不需要变动。
不过,有的用户界面可能需要相应地变动,例如,不同的数据库有不同的
安全策略,有的数据库要求登录,而有的数据库可能不需要登录。
BDE 本身就具有可伸缩性,要把一个基于 BDE 的单层应用程序过渡到两
层应用程序,这非常简单,只要修改数据集连接一个 SQL 服务器就行了。
要把一个基于 TClientDataSet 构件的单层应用程序过渡到多层应用程序,
也是非常容易的,因为 TClientDataSet 同时支持从文件中存取数据和通过
IProvider 接口存取数据。
如果计划过渡到三层的体系结构,可以先按单层或两层设计,除了要把用
户界面分开外,还要把应用逻辑分开,因为应用逻辑最终要放到中间层即应用服
务器上。在设计用户界面时,可以暂时用本地数据库提供数据,以后再改用
TClientDataSet 获取数据。
图 1.2 单层数据库应用程序的体系结构
1.2.3 单层的数据库应用程序
在单层的数据库应用程序中,应用程序和数据库共享同一个文件系统,它
们使用本地数据库或文件来存取数据。
一个单层的数据库应用程序同时包含了用户界面和数据访问机制(可能是通
过 BDE,也可能是通过文件)。图 1.2 是单层数据库应用程序的体系结构。可以
看出,既可以通过基于 BDE 的数据集构件从本地数据库中获取数据,也可以通
过 TClientDataSet 构件从文件中获取数据。有一个共同点是,它们都通过
TDataSource 构件向用户界面提供数据。
1.2.4 两层的数据库应用程序
在两层的数据库应用程序中,客户程序提供用户界面,通过 BDE 从远程数
据库服务器获取数据。图 1.3 是两层数据库应用程序的体系结构。
图 1.3 两层数据库应用程序的体系结构
在这种模式下,所有的应用程序都是客户,客户通过 BDE 与远程数据库服
务器交换数据。一个服务器可以同时处理许多客户的请求,协调访问并且更新数
据。
1.2.5 多层的数据库应用程序
在多层的数据库应用程序中,客户程序、应用服务器和远程服务器分布在
不同的机器上。其中,客户程序主要提供用户界面,它能够向应用服务器请求数
据和申请更新数据。再由应用服务器(又叫 Remote Data Broker)向远程数据
库服务器请求数据和申请更新数据。图 1.4 是多层数据库应用程序的体系结构。
图 1.4 多层数据库应用程序的体系结构
Delphi 4 既可以创建客户程序,也可以创建应用服务器。客户程序通过
IProvider 接口与应用服务器通讯,通讯的协议可以是 TCP/IP、DCOM、MTS
或 CORBA。通讯协议与客户程序上的 MIDAS 连接构件有关,也与应用服务器
上的数据模块有关。
应用服务器通过 IProvider 接口有几种方式。如果应用服务器上包含
TDataSetProvider 构件或 TProvider 构件,IProvider 接口将由这两个构件提
供 。 如 果 应 用 服 务 器 上 没 有 TDataSetProvider 构 件 和 TProvider 构 件 ,
IProvider 接口由基于 BDE 的数据集构件提供。用 TDataSetProvider 构件或
TProvider 构件提供 IProvider 接口的好处是可以对 IProvider 接口进行控制。
不过,不管哪种情况,IProvider 接口都能在客户程序与应用服务器之间传递数
据。
在多层模式下,几个客户有可能同时与一个应用服务器通讯,应用服务器
实际上充当了一个网关的作用。
1.3 设计用户界面
构件选项板的“Data Controls”页上的构件(也叫数据控件)用于显示数据库
的数据,并且让用户编辑数据并保存到数据库中。数据控件构成了数据库应用程
序的用户界面(UI)。
数据控件通过 TDataSource 构件与数据库连接,TDataSource 构件就好
像用户界面与数据库之间的导管。在同一个窗体上,几个数据控件可以连接到同
一个 TDataSource 构件,这几个数据控件能够保持同步,因为数据控件总是显
示当前记录的数据。TDataSource 构件一般放在数据模块上,与用户界面分开。
数据控件有好几种,使用哪个数据控件取决于要显示的数据的类型,也取
决于怎样组织这些信息、怎样让用户浏览信息和怎样让用户编辑数据的方式。
1.3.1 显示单条记录和多条记录
很多情况下,在同一个时刻应用程序只需要显示一条记录即当前记录的数
据,事实上,构件选项板上的数据控件大多数是为显示当前记录的数据而设计的,
如 TDBText 构件。
如果要同时显示多条记录,就要用 TDBGrid 构件或 TDBCtrlGrid 构件。
这两个构件既可以显示多条记录,也可以显示多个字段。
两个表之间可以建立 Master/Detail 关系,相应地,客户程序可以用一个
TDBText 构件显示 Master 表的某个字段,用一个 TDBGrid 构件显示 Detail
表的多条记录。
1.3.2 分析数据
有些数据库应用程序并不是直接把数据库中的原始数据显示给用户,而是
对数据进行分析、统计后以一种恰当的方式显示出来,这样能够帮助用户从中得
出结论。
构件选项板的“Data Controls”页上有一个 TDBChart 构件,这个构件能
够 以 图 表 的 形 式 对 数 据 进 行 分 析 和 显 示 。 如 果 您 购 买 的 是 Delphi 4
的 Client/Server 版本,构件选项板上将有“Decision Cube”页。这一页上的构
件能够对数据进行多维分析和统计,并以栅格和图表的形式显示出来。
1.3.3 选择要显示的数据
一个数据库应用程序往往只关心数据库中的一部分数据,比如,有的程序
只关心一部分字段,而有的程序只关心一部分记录。
至于怎样取出关心的数据,这取决于您使用的数据集构件。一个数据库应
用程序中可能使用了几个数据集构件。Delphi 4 支持六种类型的数据集。
TTable 构件。在逻辑上代表一个表。可以通过创建永久字段对象来调整字
段的外观,可以增加 Lookup 字段和计算字段,可以设置过滤条件和范围来选择
记录。
TQuery 构件。可以对数据库进行查询,并返回符合条件的记录。
TStoredProc 构件。用于执行 SQL 服务器上的存储过程。存储过程也可以
返回符合特定条件的记录。
TClientDataSet 构件。能够从应用服务器检索数据,在本地内存中复制一
个副本。正是基于这个原因,TClientDataSet 能同时工作的记录数是有限的。
用 TClientDataSet 建立的 客户 程序可 以做 得很小 ,因 为它不 需要 依赖 于
BDE,只需要 DBClient.DLL 文件。TClientDataSet 既可以从应用服务器取得
数据,也可以从文件中取得数据。
TNestedTable 构件。用于访问嵌套表中的记录。尽管 Delphi 4 不能直接
创建 Oracle8 类型的表,但是可以显示和编辑嵌套表中的数据。
自定义的数据集构件。它是从 TDataSet 继承下来的,与上述标准的数据
集构件不同的是,自定义的数据集构件得自己解释记录缓冲区中的内容。对于自
定义的数据集来说,仍然可以使用字段编辑器,也可以使用标准的数据控件显示
数据。
第二章 单层和两层的应用程序
单层和两层的数据库应用程序相对来说比较简单,应用程序和数据库往往在
同一个文件系统中,甚至就在同一个磁盘上。这两种类型的数据库应用程序都不
太适合于在多用户的环境下同时访问同一个数据库。
对于单层的应用程序来说,Delphi 4 提供了两种获得数据的方式,一种方
式是通过 BDE,另一种方式是通过文件。两层的应用程序一般要使用 BDE。
2.1 基于 BDE 的应用程序
剩余63页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 111111111111111111
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
- 基于ultralytics-yolov8, 将其检测/分类/分割/姿态等任务移植到rk3588上
- Screenshot_2024-04-30-21-47-24-26.jpg
- 基于matlab实现波束形成,包括线阵、平面阵和圆阵
- Python自动生成excel周期报告源码
- 基于matlab实现DOA 估计和自适应波束形成.rar
- 一个基于yolov8的火灾检测部署
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功