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

Delphi C/S 實戰:資料庫結構定義、TDatabase 應用與 InterBase 觸發器機制

     編輯:Delphi

18.4.1.2 IBLOCAL 資料庫結構定義腳本

使用 InterBase ISQL 工具定義結構,核心步驟:

  1. CREATE DATABASE 建立 .gdb 檔案。
  2. CREATE DOMAIN 定義可重用資料型別與約束(如 DEPTNO CHECK (VALUE = '000' OR ...))。
  3. CREATE TABLE 定義表結構、主鍵、計算欄位(FULL_NAME COMPUTED BY ...)。

IBLOCAL 包含 7 張核心表:EMPLOYEE、CUSTOMER、DEPARTMENT、EMPLOYEE_PROJECT、PROJECT、SALES、SALARY_HISTORY,均定義主鍵確保實體完整性。

18.4.2.1 TDatabase 元件:連線管理中樞

CSDEMO 定義 TDmEmployee 資料模組(Delphi 2.0 引入),集中管理 EmployeeDatabase:

  • AliasName = IBLOCAL(BDE 別名)
  • DatabaseName = EmployeeDemoDB(應用層邏輯名,供所有 DataSet 參考)
  • KeepConnection = True:持久連線,避免重複登入開銷
  • LoginPrompt = False + Params 內嵌 SYSDBA/masterkey:自動登入
  • TransIsolation = tiReadCommitted:讀取已提交資料
  • Connected = True:啟動即連線

資料模組機制讓多視窗共享單一連線與事務上下文成為可能。

18.4.2.2 优雅切換資料表:使用者體驗細節

procedure TFrmViewDemo.ShowTable(ATable: string);
begin
  Screen.Cursor := crHourglass;      // 視覺回饋:忙碌中
  VaryingTable.DisableControls;      // 凍結 UI 更新
  VaryingTable.Active := False;      // 關閉舊表
  VaryingTable.TableName := ATable;  // 切換表名
  VaryingTable.Open;                 // 開啟新表
  VaryingTable.EnableControls;      // 解凍 UI
  Screen.Cursor := crDefault;        // 恢復游標
end;

DisableControls/EnableControls 配對防止切換過程中資料感知控制項閃爍與無效繪製,crHourglass 給予使用者明確等待提示——C/S 應用網路延遲下的必備禮儀。

18.4.2.3 InterBase 觸發器:伺服器端自動化業務邏輯

薪資異動自動記錄歷史的經典案例:

TRIGGER SAVE_SALARY_CHANGE ON EMPLOYEE
AFTER UPDATE AS
BEGIN
  IF (old.salary <> new.salary) THEN
    INSERT INTO salary_history
    (emp_no, change_date, updater_id, old_salary, percent_change)
    VALUES (old.emp_no, 'now', user, old.salary,
            (new.salary - old.salary) * 100 / old.salary);
END
  • 觸發條件: EMPLOYEE 表 UPDATE 後自動觸發,無需客戶端呼叫。
  • 資料一致性: 伺服器強制執行,杜絕客戶端邏輯漏寫風險。
  • 客戶端配合: EmployeeTableAfterPost 中 if SalaryHistoryTable.Active then Refresh 同步顯示。

觸發器是資料庫層面的「切面程式設計」,實現橫切關注點(稽核、同步、驗證)的最佳載體。

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