首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi C/S 實戰:存儲過程刪除邏輯與事務控制程式設計

     編輯:Delphi

18.4.2.5 存儲過程實戰:刪除員工與關聯資料完整性維護

CSDEMO 範例中 DeleteEmployeeProc(對應伺服器端 DELETE_EMPLOYEE)展示了存儲過程維護跨表資料一致性的強大能力:

PROCEDURE DELETE_EMPLOYEE
DECLARE VARIABLE any_sales INTEGER;
BEGIN
  any_sales = 0;
  SELECT count(po_number) FROM sales WHERE sales_rep = :emp_num INTO :any_sales;
  IF (any_sales > 0) THEN
    EXCEPTION reassign_sales;  -- 業務規則阻擋:有業績不可直接刪除
  
  -- 級聯清理關聯資料
  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

單一呼叫完成業務檢查、多表級聯更新/刪除,網路往返僅一次,極大降低客戶端複雜度與網路負載。

18.4.2.5 事務顯式控制程式設計模式

Delphi 提供隱式/顯式雙模式,顯式控制效能更優、粒度更細。核心元件為 TDatabase,關鍵屬性/方法:

  • TransIsolation:交易隔離等級(CSDEMO 採 tiReadCommitted)
  • StartTransaction、Commit、Rollback 三大方法

CSDEMO 事務控制視窗實作解析

視窗顯示時開啟事務:

procedure TFrmTransDemo.FormShow(Sender: TObject);
begin
  DmEmployee.EmployeeDatabase.StartTransaction;
  DmEmployee.EmployeeTable.Open;
end;

視窗隱藏時提交:

procedure TFrmTransDemo.FormHide(Sender: TObject);
begin
  DmEmployee.EmployeeDatabase.Commit;
end;

使用者手動提交:

if InTransaction and ConfirmThen
  Commit; StartTransaction; EmployeeTable.Refresh;

使用者手動回滾:

if InTransaction and ConfirmThen
  Rollback; StartTransaction; EmployeeTable.Refresh;

此模式實現「工作單元」語義:使用者編輯過程處於事務保護下,隨時可全盤接受或全盤放棄,確保資料一致性與使用者體驗並重。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved