熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:Delphi客戶服務器應用開發(四)[4]

2013-11-23 17:48:49  來源: Delphi編程 

  客戶端執行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游戲開發實踐指南

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25128.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.