第十八章 Delphi客户服务器应用开发(二)
18.1.4.1 本地型数据库接口
本地型数据库是伴随微机的产生而产生的。dBASEII作为最早的并仍在使用的系统之一就是典型的本地型数据库。
本地型数据库管理系统的数据存放在一个本地硬盘上。DBMS接受来自用户或用户程序的命令。这些命令通常是系统特有的数据库管理语言。命令被转换为简单的磁盘访问命令,并交付文件系统来处理。然后DBMS接收来自磁盘上的数据,并加以处理。
在本地型DBMS应用中,数据库引擎(DBE)运行于工作站上。图18.2暗示数据是存放在工作站的局部驱动器上,其实在网络中,数据还可存放在文件服务器上。这里数据库引擎使用典型的文件I/O调用和记录封锁技术来直接读写数据。
存放数据的文件位于网络中的某个服务器上时,DBMS的行力与单机情况无异。 网络操作系统负责对服务器的管理,因此对DBMS而言,对服务器的使用就象使用局部的驱动器一样。
当用户发出命令,请求DBMS读取数据库中的数据时,该请求首先由工作站(客户)的网络驱动程序处理,它负责把请求从网络上传到所需的服务器网络文件系统。服务器操作系统从适当的磁盘卷上找到数据,并发回等待中的工作站驱动程序。最后,数据回传给DBMS,这样DBMS使用这些数据就象使用本地存储的数据一样。网络情况下的接口比单机情况下接口的处理增加了通信开销,正常情况下这种额外开销不会影响用户的响应时间,除非在网络通信的高峰期间或DBMS要求大数据量传递。
对于本地型DBMS其大部分工作都在工作站一侧完成,即使数据存储在文件服务器上,其对数据的处理仍然要在工作站上进行。这种方式的最主要的一个缺点是无论查询需要多么少的数据,都需要首先将查询中的所有数据通过网络传到工作站,然后由工作站负责选出满足查询条件的数据,不难想象,当几个用户同时操作数据库时,数据库网络的带宽会很快阻塞。
在这一方式下,工作站不仅要负责所有用户界面管理,还要负责所有数据处理的工作。在当今的数据库应用中,尤其是那些功能强且使用简便的系统,用户界面的处理开销是相当大的,象Windows这样的图形环境,处理上的额处开销会更大。为此而升级工作站是很得不偿失的。
18.1.4.2 客户/服务器型数据接口
由于服务器硬件技术逐年迅速地提高,数据库在处理模式上在近五年内发生了改变。本地型DBMS逐渐让位给客户/服务器型DBMS,尤其是在大中型企业中更是这样。
正如名字所暗示的,客户/服务器是将处理工作分散到工作站和服务器上去处理,服务器不仅负责存取数据,还要对数据作一定的处理工作,这样在数据发送给工作站之前即求得查询结果集,从而在大部分情况下可大大减少网络传输的开销,因此,也减轻了工作处理负担,从而只需关心用户界面的处理工作即可。
服务器处理数据带来的另一个好处是,当服务器中数据库引擎使用了缓冲机制时,多个工作站可以从中受益。例如,一用户查询了某数据,当另一用户要查询同样的数据时,即可从服务器缓冲中直接得到结果,从而免去很多开销。
客户/服务器系统的成功与否在很大程度上依赖于服务器硬件质量和容量。用户越多,服务器的处理负担越重,相应服务器硬件性能也要跟得上,否则就会导致响应时间比本地型数据库还要差的结果。
处理工作,而工作站负责用户界面处理工作
客户和服务器间的数据库接口要比本地型系统复杂得多。它有几个转换级负责命令和结果集在工作站和服务器间的传送。图18.5给出了客户/服务器数据库接口的详细情况。
客户/服务器的前端应用程序实际上不直接与数据库引擎打交道。每个客户服务器提供一个数据库通信接口,该数据库通信接口运行于前端。这些接口也称为数据库通信API等。数据库通信接口的工作流程如下:
① 前端应用程序发送命令给数据库通信接口。
② 接口通过网络把命令传给数据库引擎。
③ 数据库引擎在服务时上做查询或更新操作之类的工作,通过网络文件系统访问物理数据。
④ 数据库引擎将结果返送给工作站上的通信接口。
⑤ 前端从接口上接到结果后,显示或按用户要求做其它处理。
客户/服务器型比本地型DBMS更接近ODBC的原理。因为由前端向数据库的命令发送和由数据库向前端结果的返回都是透明的,并不需知道具体传送方式如何,各系统存在差别地方是:客户/服务器系统在管理工作站和服务器间通信的方式不同,彼此会不兼容。此外,对于本地型DBMS缺乏读取不同类型数据源的能力的问题。这些问题在IDAPI中得到了有效解决。
18.1.4.3 Borland Delphi 的解决方案
IDAPI是通过BDE(Borland Database Engine)和SQL Links,来解决本地型数据库接口和客户/服务器型数据库接口的兼容问题的,见图13.1。
Delphi 的数据库特性使你能很容易构造数据库应用程序。这些应用程序能访问Visual dBASE、Paradox、Local InterBase Server for Windows等本地数据库和Oracle、Sybase、Informix、SQL Server和Remote InterBase Server等客户/服务器数据库。
BDE是Borland公司支持Delphi 2.0 Client/Server Suite、Paradox for Windows、Visual dBASE for Windows等产品的核心数据库引擎和互连软件。BDE 提供了丰富和强壮的特性支持客户/服务器应用的开发。
提供支持多种数据库如dBASE、Paradox、Text、InterBase、Oracle、Sybase和Microsoft SQL Server以及任何ODBC数据源的统一和一致的应用程序编程接口(API)。开发者能不用修改数据库应用就能访问不同的数据库站点和数据库格式:
BDE是用于开发客户/服务器数据库应用的理想工具,数据库应用程序既可访问本地数据库又可访问远程数据库
允许数据库用直接和灵活地访问数据源
BDE对于Paradox和dBASE文件格式来是高性能的数据库引擎
支持使用ISAM(Indextd Sequential Access Method)SQL和QBE访问数据
BDE是数据集成化引擎,提高跨不同数据库的共享服务。支持不同数据库格式的相互转化,如dBASE和Oracle表、从InterBase到Paradox拷贝数据甚至建立InterBase 和Oracle表之间的一对多关系
BDE查询引擎为SQL,QBE和面向集合访问提供一致性的查询语言。支持用户定义和访问基本SQL的服务器和基于文件数据库的能力
BDE支持全32位功能,如多线程,抢占式多进程,长文件名和UNC,用户可在后台执行多个查询,多个数据库应用可访问同一个数据库文件
BDE的体系结构是基于数据库驱动程序的,它提供了各种共享服务:
缓冲区管理(Buffer Manager)
排序引擎
OS服务
内存管理
BLOB快速存取
SQL查询引擎
SQL产生器
数据库重构
表的批处理
数据转换服务
连接服务
内存数据库服务
SQL驱动程序服务
系统管理
语言管理
Paradox、dBASE和文本数据库BDE包含的数据库驱动程序支持对标准数据源的一致性访问。用户可以增加ODBC驱动和Borland SQL Links产品以支持对SQL 服务器的数据访问,如InterBase Oracle和Sybase等。此外BDE给予Windows 95和Windows NT应用开发者以直接、独立共享的对多种数据源的高级访问。
BDE在设计上是面向对象的。在运行时,数据库应用通过建立各种类型的BDE 对象与BDE交互,这些运行的对象用于操作数据库实体如数据库表、查询。BDE的扩展的API支持C、C++、Delphi等对数据库引擎的访问。
在Delphi应用程序中访问数据库是通过调BDE的API函数。Delphi在库单元BDE中提供了大约三十多个API函数和各种BDE消息和结构。由于Delphi应用程序的开发是基于部件的,有关BDE API的调用都嵌入了Delphi可视部件类库,因此,建立数据库应用时可以不必管BDE API的细节。只要正确安装IDAPI的Drivers,并进行正确的配置,就能使你的数据库应用程序与服务器连接并访问数据库。当然为了提高应用程序的数据库访问性能, 可以在程序中直接调用BDE API函数。
Borland的IDAPI包含对ODBC的支持,因此通过BDE,你的应用程序能访问一切与ODBC兼容的数据库如Access和Btrieve。
Local InterBase Server提供了一个单用户多实例的SQL服务器平台,特别是在将数据库应用程序转移到对Oracle、Sybase和Informix等远程数据库的访问之前,可以在Local InterBase Server平台建立和测试数据库应用程序。
对客户/服务器型的数据库应用程序来说,SQL Links在Delphi数据库体系结构中起着至关重要的作用。
Borland SQL Links支持访问局部(Paradox dBASE)和远程SQL数据库的BDE应用程序。为了访问特定的远程SQL服务器必须在客户端安装相应的SQL Links驱动程序。安装了SQL Links驱动程序后,SQL表达式才能被传送给相应的服务器执行。
一旦你安装了SQL Links的驱动程序并建立SQL驱动程序的Alias,你就能采用下列方法使数据库应用程序象访问本地Paradox和dBASE数据库一样访问远程数据库:
通过应用程序用户接口(界面)
通过包含嵌入SQL表达式的应用程序
直接将SQL表达式传送给服务器
BDE也支持应用程序使用SQL访问局部数源,
安装了SQL Links驱动程序,你能用SQL访问数据。驱动程序负责SQL服务器的链接,将查询语句转换成兼容的SQL语句并将它们传送给SQL数据库。等处理完成后,SQL数据库把结果以应
⑴ BDE客户查询SQL数据库;
⑵ SQL Links驱动程序建立客户工作站与SQL Server的链接,并将查询发送给SQL
服务器;
⑶ SQL服务器进行SQL表达式的错误和语法检查,处理查询并将结果返回给BDE
客户;
⑷ SQL Links驱动程序将结果通过SQL转换成客户端能识别的形式,客户端将其进
行格式化并将数据显示给用户。
在应用程序中使用SQL Links驱动程序对使用SQL的数据库具有如下好处:
直接查询SQL服务器的能力
支持SQL网络的传输
增强了记录的快速存取
数据锁定
在SQL结果集和数据库表的双向变换
使用索引给数据排序
为数据库当前Session建立书签,并可在以后重用书签
通过动态访问数据源来动态处理SQL数据
18.2 Delphi客户/服务器应用开发环境的构造
18.2.1 Borland SQL Links 的安装
SQL Links的安装过程如下:
⑴ 在客户端工作站上将SQL Links1号磁盘插入软盘驱动器.A:或B。
⑵ 在Windows 95的资源管理器中,选择运行A:\INSTALL( 或B:\INSTALL),并显示打开对话框。
⑶ 选择Continue 或按Enter。INSTALL 检测工作站上是否已安装了BDE 的动态链接库IDAPI01.DLL 。如果需要它将显示一个对话框,以让你描述该文件所在位置。当定位IDAPI01.DLL后,INSTALL显示Borland SQL Links目录对话框,描述你想安装的SQL Links驱动程序。
当你完成这些工作,选择Continue或按Enter.INSTALL显示IDAPI配置定位框。
⑷ 描述你想安装的IDAPI配置文件的升级版的位置。当你完成这些工作后,选择Continue或按Enter。在继续安装之前按照你所选择的驱动程序。安装程序将需要更多的信息,后面的章节中将叙述这些信息。
⑸ 一旦你提供了所有的必要信息,安装开始当安装结束后,你能选择察看SQL Links自述文件——READLINK.TXT。阅读这个文件将找到最新的信息。
18.2.2 配置SQL环境
与你的BDE应用程序一起安装的有BDE配置工具(BDECFG32.EXE),该工具帮助用户修改他们的应用程序配置。配置参数被存于命名为IDAPI32.CFG的二进制文件中。当应用程序启动时,将读这个文件。通常该文件在应用安装过程中被置于BDE文件目录中(C:\Program Files\Common\BDE)。
本节描述怎样使用BDE配置工具设置应用程序的SQL环境。一旦配置好BDE应用环境,就可开始联接网络,并访问SQL服务器。
关于怎样使用BDE配置工具的详细介绍,可参见BDE用户指南或按运行BDE配置工具选择Help按钮显示在线帮助。
在开始配置SQL环境前,必须已完成以下工作:
已安装SQL Links软件
退出所有其它Borland应用程序
在Windows 95中打开应用程序组Borland Delphi 2.0
选择IDAPI配置工具图标,出现配置工作窗口后进入驱动程序管理页
18.2.2.1 配置SQL Link驱动程序缺省设置的方法
SQL Link驱动程序缺省设置是指在BDE配置工具的Drivers页中的参数设置,这些参数在建立新的Alias中使用。Alias是描述网络资源的一组参数的集合。BDE应用使用Alias 联接共享数据库。Alias对于访问局部数据库并不是必要的,但要访问SQL数据库,却是必不可少。
SQL Links驱动程序的缺省设置,是你建立新的Alias 的原型。尽管你在建立Alias后能定制它,但在建立新的Alias前设置相应的缺省设置要来的容易。因为这样建立的每一个Alias将继承这些设置。
要描述驱动程序的缺省设置,要完成以下几项:
将亮条移到驱动程序的入口,驱动程序管理程序显示所有的该驱动程序的配置参数,在参数列表表端可用滚行杠检察各配置参数
如果需要编辑驱动程序的缺省配置参数,如果光标停在这格, 配置工作将自动套用缺省参数
当完成这些工作,选择File|Save,修改将在应用程序下一次启动时生效
18.2.2.2 SQL Links驱动程序的缺省设置项目的含义
1. VERSION
SQL Links驱动程序的版本号。
2. TYPE
描述当前驱动程序类型。SERVER就表示该驱动程序用于连接一个SQL服务器,FILE就表示驱动程序用于连接一个标准的基于文件服务器。
3. DLL选项
所选SQL Links的16位驱动程序的动态链接库名。
4. DLL32
所选SQL Links的32位驱动程序的动态链接库名。
5. DRIVER FIAGS
内部的产品描述标志。
6. TRACE MODE
描述记录跟踪信息的类型
7. SERVER NAME
指定目标SQL服务器名。如果指定为InterBase服务器,将包含数据库文件的全部路径,Servername:/Usr/gds/directoryname/databasenam.gdb
8. USER NAME
访问SQL服务器的缺省用户名。
9. OPENMODE
OPENMODE是SQL Links打开SQL数据库时的读写模式。取值可以是READ/WRITE或READ ONLY,缺省值是READ/WRITE。把OPEN MODE设为READ ONLY,将影响用户端的操作,但对SQL服务器没有影响。
10. SCHEMA CACHE SIZE
描述被贮存视图信息的SQL表个数。取值范围是0-32, 缺省值为8。
11. LANGDRIVER
用来操作来自SQL 服务器的数据的语言驱动程序。当光标停止LANGDRIVER域时,一个滚行框出现在正文域的左侧,用滚行杠可以用于你的驱动程序的可选的语言列表。如使用美国英语,该缺省值是空格。
当描述的语言驱动程序与一个服务器别名相适应,那么你的应用程序将使用该驱动程序处理从服务器发来的数据。这包括你察看的所有表和所有查询返回的结果表。运行在不同系统上的服务器利用字符集的转换来决定怎样对数据编码。如果你操作在非英语环境,你的BDE应用程序可以使用不同于SQL服务器的字符集。如果你的平台上的字符集同SQL服务器上的不匹配,那么在两种不同平台间传递数据将引起下列问题:
数据在你的平台上不正确的显示
SQL数据库上将记录错误的字符
为防止这种情况的出现,SQL Links提供语言驱动程序,实现你的应用程序的字符集与SQL数据库的字符集的数据转换。这将使从SQL服务器传来的数据在你的平台上正确显示,或将你输入的数据可靠地传送到服务器上。
语言驱动程序包含有关排序和大小写转换的信息。无论何时,对SQL数据库的查询按本地数据库的规则处理应用程序的语言驱动程序用于评测排序的字符范围。 如果平台上的排序和大小写转换与SQL服务器上的不同,你的应用程序就会显示不一致的结果。
如果SQL数据库使用扩展字符集,请确信用于访问SQL 服务的别名中描述正确的,SQL Links语言版本选择的驱动程序的字符集应当与SQL服务器的相同。如果你没有找到合适的SQL Links语言驱动,你可修改别名中的SQLQRYMODE入口,防止按局部数据库规则处理查询。
12. SQLPASSTHRU MODE
描述应用程序访问SQL服务器时是否借助平台命令和传递式SQL。取值范围和它们的含义列于下表:
表18.3 SQLPASSTHRU MODE设置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
设置含 义
──────────────────────────────────────
NOT SHARED 传递SQL和非传递性SQL不共享相同的连接
SHARED AUTOCOMMIT 缺省值。传递SQL和非传递SQL将共享相同连接,传
递式SQL将以与非传递SQL相似的方式动作。 也就说
用户的传递式SQL表达式将被自动提交。
SHARED NOAUTOCOMMIT 传递式SQL和非传递式SQL将共享同一个连接,但SQL
驱动程序并不自动提交SQL表达式。在这种模式下,传
递行为是服务器独立的。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SHARED AUTOCOMMIT和SHARED NOAUTOCOMMIT 模式并不支持所有的传递式表达式。当SHARED AUTOCOMMIT或SHARED NOAUTOCOMMIT模式被设置,在传递式SQL中不需执行事务控制语言。使用你的BDE应用编程语言来开始,提交回送事务。当传递式SQL和非传递式SQL共享一个连接,记录快存并不立即反映传递SQL操作的更新。
13. SQLQRYMODE
描述处理查询SQL数据的方法。取值范围含义列于下表,缺省值NULL:
表18.4 SQLQRYMODE设置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
设置模 式 含 义
──────────────────────────────────────
NULLServer-Local 在Server-local中,查询模式查询首先传递给SQL服
务器,如果服务器不能执行查询,查询就在本地执
行。
SERVER Server-Only 在Server-Only查询模式,查询被发送给SQL 服务
器。如果服务器不能执行查询,不执行本地查询。
LOCAL Local-Only 在local-only模式,查询总是本地执行。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
正常情况下,查询SQL数据库将在数据库服务器端被处理。然而,在某些情况下,完全在SQL服务器端执行的查询的结果不同于在本地执行的查询的结果。例如,你的BDE 应用程序查询函数执行在字符域的大小写敏感搜索。如果,服务器不支持大小写敏感搜索,那么Select语句的条件如“>A”在不同地方查询将产生不同的结果。 如果你想确信所有来自BDE应用的查询都按照SQL服务器上的规则来执行,那么你就应合理配置SQL Links驱动程序,阻止查询的本地处理。使用BDE配置工具修改SQL数据库别名,将SQL QRYMODE设置成SERVER就可做到这一点。新的SQLQRYMODE值将在应用程序下一次启动时生效。
14. SCHEMA CACHE TIME
描述表信息将被贮存多长时间,取值范围和它们的含义列于下表,缺省值为-1。
表18.2 SCHEMA CACHE TIME设置表
━━━━━━━━━━━━━━━━━━━━━━━━━
设置 含 义
─────────────────────────
-1 表被贮存至你关闭数据库
0 不贮存表
1…2147483647 贮存表的时间数(秒为单位)
━━━━━━━━━━━━━━━━━━━━━━━━━
设置该值能提高数据库表的访问性能。
15. MAX ROWS
描述SQL Links驱动程序能给服务器传递的SQL语句的最大行数。如果值为-1,则没有限制。
16. BATCH COUNT
描述在自动提交前包含在BATCH中的修改记录个数。
18.2.2.3 建立和管理SQL别名
设置标准别名的过程包括给Alias参数赋值,描述包含Paradox或dBASE文件的路径名和目录名。设置用于SQL数据库的别名包括给alias赋名,定制用于SQL服务器和数据库的访问参数。SQL别名包括目标SQL服务器的用户名和口令。这些参数对于访问任何SQL数据都是必须的。常用的SQL别名是当安装时,第一次修改缺省的SQL Link驱动程序的参数时自动建立。
关于如何使用配置工具增加、修改和删除别名,请参阅附录。
18.2.2.4 联接SQL服务器
当应用程序第一次访问SQL数据库,会触发一个自动联接过程。联接过程需要确认访问数据库的权限。
如果配置文件和SQL Link驱动正确配置,应能用应用程序的File菜单通过相应的数据库别名在你的SQL数据库中选取一张表。下面介绍如何解决联接InterBase服务器过程中出现现的一般问题,并讨论有关使用Borland SQL Links的各种主题。
1. InterBase服务器需求
下表所列软件应当已经安装在运行InterBase的服务器
表18.5 InterBase服务器软件要求
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
项 目 描 述
────────────────────────────────────
数据库服务器软件 InterBaseV4.0或更高版本
网络协议软件 与数据库服务器和客户工作端网络协议兼容的网络协议
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2. 客户工作站需求
下表所列软件应当已经安装和运行于客户工作站,表中还列出相关文件和参数。
表18.6 客户工作站软件要求
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
项目描述
──────────────────────────────────────
BDE应用程序 被支持BDE应用程序,并已按产品文档要求安装
硬件和操作系统 1.5MB剩余磁盘空间,适合Borland Delphi需要的硬件和操作
系统
访问网络服务器的如果你的Borland Delphi被安装在网络文件服务器上,请确
权力 认对BDE文件安装目录有读写的权力
网络协议软件 网络协议软件应当与服务器网络协议和客户工作端的客户数
库通信驱动程序兼容。InterBase支持Windows 95 WinSock API
HOSTS文件HOSTS文件包含你要连接的服务器的名称和地址:
例如:128.127.50.12 MIS_Server
SERVIDES文件 一个SERVICES文件包含访问InterBase服务器的协议。 在SQL
Links安装过程中,“gds_db 3050/tcp”被加入这个文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
erver)