服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

DELPHI基础教程:Delphi客户服务器应用开发(四)[4]


发布日期:2022年01月02日
 
DELPHI基础教程:Delphi客户服务器应用开发(四)[4]

客户端执行SHIP_ORDER的程序如下

procedure TFrmExecProcBtnShipOrderClick(Sender: TObject)

begin

with DmEmployee do

begin

ShipOrderProcParams[]AsString := SalesTable[PO_NUMBER];

ShipOrderProcExecProc;

SalesTableRefresh;

end;

end;

当用户按ShipOrder按钮时执行这段程序程序中先准备输入参数用ExecProc方

法执行存储过程调用SalesTableRefresh方法刷新数据显示

在CSDEMO应用程序中另一个使用存储过程的TStoredProc部件是DeleteEmployeeProc它完成的任务是删除Employee表中的记录并修改所有相关的表 以维护数据的一致性其属性如下

DeleteEmployeeProc部件主要属性的取值

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

属性名 属 性 值

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

DataBaseName EmployeeDemoDB

ParamBindMode PbByName

Params EMP_NUM(输入参数整型)

StoredProcName DELETE_EMPLOYEE

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

存储过程DELETE_EMPLOYEE的程序如下

PROCEDURE DELETE_EMPLOYEE

DECLARE VARIABLE any_sales INTEGER;

BEGIN

any_sales = ;

SELECT count(po_number)

FROM sales

WHERE sales_rep = :emp_num

INTO :any_sales;

IF (any_sales > ) THEN

BEGIN

EXCEPTION reassign_sales;

SUSPEND;

END

UPDATE department

SET mngr_no = NULL

WHERE mngr_no = :emp_num;

UPDATE project

SET team_leader = NULL

WHERE team_leader = :emp_num;

DELETE FROM employee_project

WHERE emp_no = :emp_num;

DELETE FROM salary_history

WHERE emp_no = :emp_num;

DELETE FROM employee

WHERE emp_no = :emp_num;

SUSPEND;

END

Parameters:

EMP_NUM INPUT INTEGER

从上述存储过程的例子中我们看到存储过程在维护服务器上的数据一致性方面有很强的能力它节省了系统开销提高了客户端的性能

事务控制编程

在客户/服务器应用程序中事务控制是一项很重要的技术它对于提高系统的可靠性维护数据一致性有着重要的意义

Delphi中提供了事务的隐式和显式两种控制方法其中显式控制的性能较高下面介绍Delphi事务显式控制的编程方法

Delphi担当事务控制任务的部件是TDatabase TDatabase 用于事务控制的属性是TransIsolation方法有StartTranstionCommit和Rollback关于这些属性和方法作用和使用方法请参阅客户/服务器事务管理

在CSDEMO中TDatabase 部件为EMployeeDatabase其TransIsolation属性值为tiReadCommitted意为如果存在多个同时事务访问数据库则其中任一事务只能读其它事务提交的了数据

CSDEMO中演示事务控制的窗体是TFrmTransDemo

DBGrid中显示EmployeeTable中的内容当窗口显示时EmployeeDatabase开始一次事务控制并激活EmployeeTable:

procedure TFrmTransDemoFormShow(Sender: TObject)

begin

DmEmployeeEmployeeDatabaseStartTransaction;

DmEmployeeEmployeeTableOpen;

end;

当窗口被关闭或隐藏时EmployeeDatabase提交事务

procedure TFrmTransDemoFormHide(Sender: TObject)

begin

DmEmployeeEmployeeDatabaseCommit;

end;

窗口中有两个按钮BtnCommitEdits和BtnUndoEdits按下BtnCommitEdits按钮将提交当前事务并开始新的事务控制并刷新数据

procedure TFrmTransDemoBtnCommitEditsClick(Sender: TObject)

begin

if DmEmployeeEmployeeDatabaseInTransaction and

(MessageDlg(Are you sure you want to commit your changes?

mtConfirmation [mbYes mbNo] ) = mrYes) then

begin

DmEmployeeEmployeeDatabaseCommit;

DmEmployeeEmployeeDatabaseStartTransaction;

DmEmployeeEmployeeTableRefresh;

end else

MessageDlg(Cant Commit Changes: No Transaction Active mtError [mbOk]

end;

按下BtnUndoEdits按钮将返转当前事物恢复原来的数据开始新的事务控制并刷新数据的显示

procedure TFrmTransDemoBtnUndoEditsClick(Sender: TObject)

begin

if DmEmployeeEmployeeDatabaseInTransaction and

(MessageDlg(Are you sure you want to undo all changes made during the +

current transaction? mtConfirmation [mbYes mbNo] ) = mrYes) then

begin

DmEmployeeEmployeeDatabaseRollback;

DmEmployeeEmployeeDatabaseStartTransaction;

DmEmployeeEmployeeTableRefresh;

end else

MessageDlg(Cant Undo Edits: No Transaction Active mtError [mbOk]

end;

返回目录DELPHI基础教程

编辑推荐

Java程序设计培训视频教程

JEE高级框架实战培训视频教程

Visual C++音频/视频技术开发与实战

Oracle索引技术

ORACLEG数据库开发优化指南

Java程序性能优化让你的Java程序更快更稳定

C嵌入式编程设计模式

Android游戏开发实践指南

[] [] [] []

               

上一篇:DELPHI基础教程:Delphi客户服务器应用开发(三)[1]

下一篇:DELPHI基础教程:Delphi客户服务器应用开发(四)[3]