知识大全 Delphi客户服务器应用开发(四)[4]

Posted

篇首语:没有加倍的勤奋,就既没有才能,也没有天才。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Delphi客户服务器应用开发(四)[4]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:Delphi客户服务器应用开发(四)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  客户端执行SHIP_ORDER的程序如下

  procedure TFrmExecProc BtnShipOrderClick(Sender: TObject)

  begin

  with DmEmployee do

  begin

  ShipOrderProc Params[ ] AsString := SalesTable[ PO_NUMBER ];

  ShipOrderProc ExecProc;

  SalesTable Refresh;

  end;

  end;

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

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

  在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 方法有StartTranstion Commit和Rollback 关于这些属性和方法作用和使用方法请参阅客户/服务器事务管理

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

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

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

  procedure TFrmTransDemo FormShow(Sender: TObject)

  begin

  DmEmployee EmployeeDatabase StartTransaction;

  DmEmployee EmployeeTable Open;

  end;

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

  procedure TFrmTransDemo FormHide(Sender: TObject)

  begin

  DmEmployee EmployeeDatabase Commit;

  end;

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

  procedure TFrmTransDemo BtnCommitEditsClick(Sender: TObject)

  begin

  if DmEmployee EmployeeDatabase InTransaction and

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

  mtConfirmation [mbYes mbNo] ) = mrYes) then

  begin

  DmEmployee EmployeeDatabase Commit;

  DmEmployee EmployeeDatabase StartTransaction;

  DmEmployee EmployeeTable Refresh;

  end else

  MessageDlg( Can t Commit Changes: No Transaction Active mtError [mbOk] )

  end;

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

  procedure TFrmTransDemo BtnUndoEditsClick(Sender: TObject)

  begin

  if DmEmployee EmployeeDatabase InTransaction and

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

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

  begin

  DmEmployee EmployeeDatabase Rollback;

  DmEmployee EmployeeDatabase StartTransaction;

  DmEmployee EmployeeTable Refresh;

  end else

  MessageDlg( Can t Undo Edits: No Transaction Active mtError [mbOk] )

  end;

  返回目录 DELPHI基础教程

       编辑推荐

       Java程序设计培训视频教程

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

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

  Oracle索引技术

  ORACLE G数据库开发优化指南

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

  C嵌入式编程设计模式

  Android游戏开发实践指南

cha138/Article/program/Delphi/201311/25128

相关参考

知识大全 Delphi客户服务器应用开发(四)[2]

DELPHI基础教程:Delphi客户服务器应用开发(四)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(四)[1]

DELPHI基础教程:Delphi客户服务器应用开发(四)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(二)[4]

DELPHI基础教程:Delphi客户服务器应用开发(二)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(三)[4]

DELPHI基础教程:Delphi客户服务器应用开发(三)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(一)[2]

DELPHI基础教程:Delphi客户服务器应用开发(一)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(一)[3]

DELPHI基础教程:Delphi客户服务器应用开发(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(一)[1]

DELPHI基础教程:Delphi客户服务器应用开发(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(二)[1]

DELPHI基础教程:Delphi客户服务器应用开发(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(二)[3]

DELPHI基础教程:Delphi客户服务器应用开发(二)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 Delphi客户服务器应用开发(二)[2]

DELPHI基础教程:Delphi客户服务器应用开发(二)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起