使用 InterBase ISQL 工具定義結構,核心步驟:
CREATE DATABASE 建立 .gdb 檔案。CREATE DOMAIN 定義可重用資料型別與約束(如 DEPTNO CHECK (VALUE = '000' OR ...))。CREATE TABLE 定義表結構、主鍵、計算欄位(FULL_NAME COMPUTED BY ...)。IBLOCAL 包含 7 張核心表:EMPLOYEE、CUSTOMER、DEPARTMENT、EMPLOYEE_PROJECT、PROJECT、SALES、SALARY_HISTORY,均定義主鍵確保實體完整性。
CSDEMO 定義 TDmEmployee 資料模組(Delphi 2.0 引入),集中管理 EmployeeDatabase:
AliasName = IBLOCAL(BDE 別名)DatabaseName = EmployeeDemoDB(應用層邏輯名,供所有 DataSet 參考)KeepConnection = True:持久連線,避免重複登入開銷LoginPrompt = False + Params 內嵌 SYSDBA/masterkey:自動登入TransIsolation = tiReadCommitted:讀取已提交資料Connected = True:啟動即連線資料模組機制讓多視窗共享單一連線與事務上下文成為可能。
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 應用網路延遲下的必備禮儀。
薪資異動自動記錄歷史的經典案例:
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
EmployeeTableAfterPost 中 if SalaryHistoryTable.Active then Refresh 同步顯示。觸發器是資料庫層面的「切面程式設計」,實現橫切關注點(稽核、同步、驗證)的最佳載體。