第十八章-Delphi客户服务器应用开发(三)(3)

18.3.1.2 定制数据库服务器的注册参数

大多数数据库服务器都包含限制数据库访问的安全特征。通常,在用户能访问数据库之前,服务器都要求注册的用户名和口令。

如果服务器需要注册,在设计阶段,Delphi 会在你试图联接时提示你,诸如在会TTable部件描述数据库表名时。

在缺省情况下,Delphi应用在打开数据库服务器的联接时,显示标准注册对话框。如果联接已建立,则注册对话框不会出现。

可以用下列方法处理服务器注册:

1. 将TDatabase部件的LoginPrompt属性置为True。这样,当应用程序试图建立数据库联接时,标准注册对话框会打开。

2. 将LoginPrompt属性置为False,在TDatabase部件的Params属性中包含用户名和口令参数。例如:

   USERNAME = SYSDBA

PASSWORD = mosterkey

但不推荐使用该方法,因为这会危害数据库安全

3. 使用TDatabase部件的OnLogin事件设置注册参数。OnLogin事件得到TDatabase 注册参数数组的拷贝,并利用Values属性改变这些参数。如:

   LoginParams.Values['SERVER NAME'] := 'MYSERVERNAME';

   LoginParams.Values['USER NAME'] := 'MYUERNAME';

   LoginParams.Values['PASSWORD'] := 'MYPASSWORD';

当控制从数据库注册事件处理过程中返回时,这些参数被用来建立联接。

18.3.1.3 建立应用程序特定的别名

TDatabase的Aliases描述了数据库表的位置和数据库服务器的联接参数。通常都是在Delphi之外,运用BDE配置工具(BDECFG32.EXE)创建别名,并且别名被存在BDE 配置文件IDAPI32.CFG中。

用户也可以用TDatabase创建只在应用程序中可用的别名,用TDatabase 创建的别名不会加进BDE配置文件中。任何DataSet部件可通过描述DatabaseName 属性来使用这些别名。为了定制这些局部别名的参数,用鼠标左键双击TDatabase部件或从TDatabase部件中选择Database Editor,Delphi就会打开数据库属性编辑器(Database Properties Editor)。

18.3.1.4 控制数据库的联接

TDatabase部件的Connected属性,指示TDatabase部件是否建立与数据库服务器的联接。当应用程序打开数据库中的表时,Connected被设置为True。将Connected 设为True就建立了数据库的联接。

1. 保持数据库联接

TDatabase的KeepConnection属性描述当没有数据库表打开时是否要与保持数据库的联接。

如果应用程序需要在单个数据库中多次打开关闭多个表时,将KeepConnection 置为True能使应用程序具备更好的性能。

当KeepConnection为True时,即使没有表打开,应用程序也能保持数据库的联接。那么就能重复打开和关闭数据库表而不需每次进行联接注册。

2. 使用TSesstion控制联接

 TSesstion部件有一个面向整个应用程序的KeepConnections属性。如果Session.KeepConnections为True,那么用于所有TDatabase部件的数据库联接都是持久的。

TSession为应用程序提供数据库联接的全局控制。TSession中的Databases 属性是Session中所有活跃数据库组成的数组,DatabasesCount属性描述活跃数据库的数目。

3. 描述Net和Private目录

TSession的NetFileDir属性描述BDE网络控制目录的路径。TSession的PrivateDir属性描述存储诸述处理局部SQL表达式的临时文件的目录的路径。

18.3.1.5 获取数据库信息

TSession拥有许多让用户获取数据库有关的信息,每个方法都以TStringList 部件作为传入参数,并将信息返回TStringList中。

1. GetAliasNames方法

声明:procedure GetAliasNames(List: TStringList);

GetAliasNames方法消除List中的参数,并将所有已定义的BDE别名的名字写入List。应用程序生成的别名不包括在内。

2. GetAliasParams方法

声明:procedure GetAliasParams(const AliasName: String; List: TStringList);

GetAliasParams方法清除List的内容,并将BDE别名为AliaName的参数写入List。

3. GetDatabaseNames方法

声明:procedure GetDatabaseNames(List: TStrings);

GetDatabaseNames方法清除List的内容并将所有BDE别名和应用程序定义的别名的名字写入List。

4. GetDriverNames方法

声明:procedure GetDriverNames(List: TStrings);

GetDriverNames方法清除List中的内容,并将BDE当前安装的驱动程序名写入List。

5. GetDriverParams方法

声明:procedure GetDriverParams(const DriverName: String; List: TStrings);

GetDriverParams方法消除List中的内容,并将名为DriveName驱动程序缺省参数写入List。

6. GetTableNames方法

声明:procedure GetTableNames(const DatabaseName, Pattern: Strings;

Extensions, SystemTable: Boolean; List: TStrings);

GetTableNames方法消除List中的内容,并将名为DatabaseName的数据库中的所有表的名字写入List。Pattern参数将限制表名。对于SQL服务器,将SystemeTables设为True将获取系统表和用户表。对非SQL数据库,将Extensions设为True将在表名中包含扩展名。

18.3.2 处理Client/Server事务控制

使用隐式控制和显示控制的数据库应用中有两种方法管理事务控制:

 ● 运用TDatabase部件的属性和方法进行显式控制

  ● 运用TQuery部件的传递式SQL控制事务

Delphi还支持Paradox和dBASE表的局部事务处理

18.3.2.1 事务控制概述

当用Delphi创建数据库应用时,Delphi提供了用为所有数据库访问的事务控制。

事务是这样一组操作,在被提交前,它们对一个或多个数据库的操作,必须全部执行成功。如果其中一个操作失败,则所有操作失败,即事务具有原子性。

即使发生硬件失败,事务也要保证数据库一致性。当允许多用户并发访问时,事务还要维持数据完整性。

例如:一个应用程序可能更新ORDERS表以指明接受购买某一项目的定单,那么也要更新INNENTORY表以反映库存的减少。如果在第一个更新之后,第二个更新之前发生硬件错误,数据库就会处于不一致状态,因为库存情况没有反映定单情况。在事务控制下,两个表达式将在同一时间提交,如果其中一个表达式失败,则被返转(Rolled Back)。

时间: 2024-10-30 10:24:27

第十八章-Delphi客户服务器应用开发(三)(3)的相关文章

第十八章-Delphi客户服务器应用开发(二)(2)

BDE在设计上是面向对象的.在运行时,数据库应用通过建立各种类型的BDE 对象与BDE交互,这些运行的对象用于操作数据库实体如数据库表.查询.BDE的扩展的API支持C.C++.Delphi等对数据库引擎的访问. 在Delphi应用程序中访问数据库是通过调BDE的API函数.Delphi在库单元BDE中提供了大约三十多个API函数和各种BDE消息和结构.由于Delphi应用程序的开发是基于部件的,有关BDE API的调用都嵌入了Delphi可视部件类库,因此,建立数据库应用时可以不必管BDE A

第十八章-Delphi客户服务器应用开发(一)(1)

客户/服务器的开发工作涉及定义客户/服务器的体系结构, 然后再将该结构与其它一些对于客户/服务器的实现至关重要的系统结构和技术集成起来.Delphi 2.0的Client/Sever版支持用户开发客户/服务器结构的应用程序.本章中我们将阐述客户服务器体系结构原理.如何用Delphi构建客户/服务器的环境和Delphi存取远程SQL服务器的编程和注意事项. 18.1 Delphi客户/服务器应用开发原理 18.1.1 客户/服务器体系结构 18.1.1.1 体系结构概述 客户/服务器系统的体系结构

第十八章-Delphi客户服务器应用开发(一)(4)

18.1.3.5 Oracle RDBMS Oracle RDBMS为以任务为中心的企业范围的应用提供所需要的操作.监督和管理软件.使用Oracle RDBMS的分布式数据库和网点能力,用户可以透明地集成该企业的新旧数据.系统和应用程序.Oracle被分组形成几个软件包,使得客户可选地获取他们自己的应用所需要的功能.这些软件包是: ● 标准Oracle软件包 ● 过程化选件软件包 ● 分式式对象软件包 ● 并行服务器选件软件包 ● 开放网关软件包 标准Oracle软件包提供解决大量关键任务的联机

第十八章-Delphi客户服务器应用开发(四)(1)

18.3.4.1 适化概述 所谓适化就是将桌面应用转化为Client/Server应用. 适化是一个很复杂的主题,这里不详细讲述.本节将介绍适化Delphi 应用程序中最重要的方面. 适化的主要方面有: ● 将数据库从桌面平台到服务器的适化 ● 将应用程序转化为Client/Server的适化 适化还需要实现从桌面环境到Client/Server环境的转化. 桌面数据库和SQL服务器数据库在许多方面有不同之处.例如: ● 桌面数据库用于同一时刻单用户的访问,而服务器用于多用户访问 ● 桌面数据库

第十八章-Delphi客户服务器应用开发(二)(1)

18.1.4.1 本地型数据库接口 本地型数据库是伴随微机的产生而产生的.dBASEII作为最早的并仍在使用的系统之一就是典型的本地型数据库. 本地型数据库管理系统的数据存放在一个本地硬盘上.DBMS接受来自用户或用户程序的命令.这些命令通常是系统特有的数据库管理语言.命令被转换为简单的磁盘访问命令,并交付文件系统来处理.然后DBMS接收来自磁盘上的数据,并加以处理. 在本地型DBMS应用中,数据库引擎(DBE)运行于工作站上.图18.2暗示数据是存放在工作站的局部驱动器上,其实在网络中,数据还

第十八章-Delphi客户服务器应用开发(一)(3)

18.1.3 各种数据库服务器功能介绍 服务器数据管理包括若干软件,它们使用户可以访问网络中的任何节点以及确保多用户环境下的保密性.可恢复性和完整性.如前面所提到的,客户/服务器计算中的基本存取链路是SQL,它是一种高级非过程数据库语言, 现在已开发出很多支持SQL 的后端服务器及DBMS.下面将描述这些产品. 18.1.3.1 DB2 DB2是一种由IBM公司开发的RDBMS.它使用SQL执行所有的数据库操作.数据定义.数据存取.数据操作以及授权功能.SQL语句由用户在一个客户机节点从键盘输入

第十八章-Delphi客户服务器应用开发(一)(2)

18.1.1.4 中间件概述 中间件是一个软件层,它保护应用程序开发人员避免受到各种通信协议.操作系统以及数据库管理系统的影响.它为建立可与以前沿袭下来的应用程序并存的新应用程序打下了基础. 中间件有好几种类型.它们包括应用程序设计接口(API),远程过程调用(RPC),网络通信.数据库访问以及计算机辅助软件工程(CASE)工具. 由于客户/服务器系统需要集成各种不同结构的机器和技术,因而应用程序设计相当复杂.选择适当的中间件可以消除程序设计人员为每个单独协议和操作系统编写代码的麻烦. 18.1

第十八章-Delphi客户服务器应用开发(四)(4)

在CSDEMO应用程序中另一个使用存储过程的TStoredProc部件是DeleteEmployeeProc.它完成的任务是删除Employee表中的记录,并修改所有相关的表, 以维护数据的一致性.其属性如下: 表18.20 DeleteEmployeeProc部件主要属性的取值 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 属性名 属 性 值 ────────────────────────── DataBaseName EmployeeDemoDB ParamBindMode PbB

第十八章-Delphi客户服务器应用开发(四)(2)

18.4.1.2 数据库结构介绍 IBLOCAL数据库的结构都是由InterBase服务器工具交互式SQL工具(ISQL)定义的. 用ISQL定义数据库,首先要用Create Database命令建立数据库,建立的新数据库一般是以GDB为扩展名.建立好后,就可以用SQL语言定义数据库表,例如建立EMPLOYEE表的SQL语句如下: 定义域名数据类型: CREATE DOMAIN FIRSTNAME AS VARCHAR(15); CREATE DOMAIN LASTNAME AS VARCHAR

第十八章-Delphi客户服务器应用开发(三)(5)

18.3.3 使用存储过程 18.3.3.1 TStoredProc部件概述 存储过程是以数据库服务器为基础的接受输入参数,并将结果返回给应用程序的一段程序.TStoredProc部件操作远程服务器上的数据库中的存储过程.存储过程是一连串表达式的集合,作为服务器的一部分存储.存储过程在服务器上执行一系列重复性的与数据库相关的任务,并将结果传给客户应用程序,如Delphi数据库应用程序. TStaredProc部件使Delphi数据库应用程序能执行服务器上的存储过程. 通常,作用于数据库表中大量记