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

18.3.2.2 使用隐式控制

在缺省情况下,Delphi通过BDE为应用程序提供隐式事务控制。当应用程序处于隐式事务控制时Delphi为DataSet中的写每个记录进行隐式事务控制。它提交每一个独立的写操作,如Post和Append Record。

使用隐式事务控制是容易的,它保证最小的记录更新冲突和数据库的一致性视图。另一方面,因为写入数据库的数据的每一行都要进行事务控制, 所以隐式事务控制将导致网络过忙和应用程序性能下降。

如果采用显式事务控制,就能选择最有效的时机来开始、提交和终止事务,特别是在开发多用户环境下的客户应用程序运行访问远程SQL服务器,就更应该采用显式控制。

18.3.2.3 使用显式事务控制

有两种协作又独立的方式可运用于Delphi数据库应用的事务控制:

● 使用TDatabase部件的方法和属性

● 使用TQuery部件中的传递式SQL。这种方式只有在Delphi Client/Server Suite版中才有效,SQL Links将SQL表达式直接传给过程SQL或ODBC服务器

使用TDatabase部件的方法和属性的好处是提供了清晰的、轻便的、与特定数据库或服务器无关的应用能力。

使用传递式SQL的主要好处在于可以运用特定服务器的先进事务管理能力。

  1. 使用TDatabase的方法和属性

下表中列出了TDatabase部件中用于事务管理的方法和属性以及它们的使用方法:

表18.11 TDatabase用于事务显式控制的方法表

  ━━━━━━━━━━━━━━━━━━━━━━━━

   方法或属性      作 用

  ────────────────────────

Commit 提交数据的修改并终止事务

Rollback 取消数据的修改并终止事务

StartTransaction 开始一个事务

TransIsolation 表述事务的独立性级别

  ━━━━━━━━━━━━━━━━━━━━━━━━

StartTransaction,Commit和Rollback是供应用程序在运行时调用开始事务,控制事务并且保存或放弃所做数据修改的方法。

TransIsolation是TDatabase部件的用于控制作用于相同表的不同事务之间如何交互的属性。

⑴ 开始一个事务

当你开始一个事务时,后来的所有读写数据库的表达式都发生在那次事务的环境中。每个表达式都是其中一部分。任何表达式所做的修改,要么成功地提交给数据库,要么每一个修改都被取消。考虑一个在ATM上的银行传输问题。当顾客决定将钱从存款帐户转到支付帐户时,在银行数据库记录上必须发生两个修改:

● 存款帐户必须记入借方

● 支付帐户必须记入贷方

如果出于某种原因,其中的一个操作不能被完成,那么任何一个操作都不应该发生。因为这些操作是相关的,它们应该发生在同一个事务中。

为了开始Delphi应用程序中的一个事务,需要调用TDatabase部件中的StartTransaction方法:

DatabaseInterBase.StartTransaction;

此后的所有数据操作都发生在最近一个事务的环境中,直到该次事务通过调用Commit或Rollback显式地终止为止。

那么,应当将事务保持多久呢?理想状态下,只要需要,多久都行。事务的活跃状态越长,同时访问数据库的用户越多,在你的事务的生命其中,更多的并发、同时的事务开始和终止,于是当试图提交修改时,与其它事务冲突的可能性更大。

⑵ 提交一个事务

为了做永久性修改,事务必须使用TDatabase部件的Commit方法提交。执行提交表达式将保存数据库的修改并终止事务。例如,下列表达式将终止在上例中开始的事务:

DatabaseInterBase.Commit

Commit的调用应当置于try…except表达式中。如果一个事务不能成功提交,你就能处理错误,并重试操作。

⑶ 返转一个事务

为了取消数据库修改,必须用Rollback方法返转一个事务。Rollback 复原一个事务的修改,并终止事务,例如:下列表达式将返转一个事务:

 DatabaseInterBase.Rollback;

Rollback通常发生在:

● 异常处理代码

 ● 按钮或菜单事件代码,如用户点按了Cancel按钮

⑷ 使用TransIsolation属性

TransIsolation属性描述TDatabase部件事务的独立级别,事务的独立级别决定了事务与其它作用于相同表的事务是如何相互作用的。在改变或设置TransIsolation 的值之前,应当相当熟悉Delphi中的事务和事务管理。

TransIsolation的缺省值是tiReadCommitted。下表中总结了TransIsolation的可能值并描述了它们的含义:

表18.12 TransIsolation属性值的含义

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   独立级别         含 义

──────────────────────────────────────

  tiDirtyRead 允许读由其它同时事务写入数据库的未提交的修改。未提交的

           修改不是永久性的,可能在任何时候被复原。 在这个级别你

           的事务与其它事务所做的修改具有最低独立度。

tiReadCommitted 只允许读由其它同时事务提交的数据库修改。这是缺省的独

           立级别。

tiRepeatableRead 允许单个的数据库读事务无法看见其它同时事务对相同数据做

的修改。这个独立级别保证了你的事务一次读一个记录,记录

的视图不会改变, 在这个级别你的事务与其它事务做的修改完

全独立。

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

各种数据库服务器不同程度地支持这些独立级别,有的根本不支持。 如果请求的隔离级别不被服务器支持,Delphi将采用更高的独立级别。各种服务器支持的独立级别请参见表18.10。

如果应用程序使用ODBC与服务器交互,ODBC驱动程序必须支持独立级别。

2. 使用传递式SQL

为了能使用传递式SQL控制事物,必须:

  ● 使用Delphi Client/Server Suite

● 安装正确的SQL Links驱动程序

  ● 正确配置网络协议

  ● 访问远程服务器上数据库的能力

  ● 用BDE配置工具将SQLPASSTHROUGH MODE设置为NOT SHARED

通过传递式SQL,你可以使用TQuery、TStoredProc、或TUpdateSQL部件直接发送一个SQL事务控制表达式给远程数据库服务器;BDE本身并不处理SQL表达式,采用传递式SQL可使用户直接获得SQL服务器提供了事务控制优点,尤其是当那些控制是非标准的时。

SQL PASS THROUGHMODE 描述BDE和传递式SQL是否共享相同的数据库联接。在大多数情况下,SQLPASSTHROUGHMODE被设置SHARED AUTOCOMMIT。然而,如果你想将SQL事务控制传递给服务器,你就必须用BDE配置工具,将BDE的SQLPASSTHROUGHMODE 设置为NOT SHARED。此外,还必须为传递SQL事务控制表达式的TQuery部件建立独立的TDatabase 部件。

3. 使用本地事务

BDE还支持Paradox和dBASE上的本地事务。从代码角度而言,在本地事务和远程数据库服务器的事务之间没有什么差别。

当作用于本地数据库表的事务开始时,更新操作被记录在日志中,每个日志记录包含旧的记录缓冲区。当事务处于活跃状态,更新的记录被锁定,直到事务被提交或返转,在返转过程中,旧的记录被应用于将更新的记录恢复到原先的状态。

时间: 2024-08-01 14:22:32

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

第十八章-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数据库应用程序能执行服务器上的存储过程. 通常,作用于数据库表中大量记