特定業務規則要求單表記錄上限 (如「每位用戶最多 3 筆訂單」)。可在 TTable.BeforeInsert 事件中攔截新增動作。
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
// RecNo 為 1 基底,若已達 3 筆則阻止
if Table1.RecNo >= 3 then
begin
MessageDlg('記錄數已達上限 (3 筆),無法新增', mtInformation, [mbOK], 0);
Abort; // 取消 Insert 操作,保持資料集狀態不變
end;
end;
RecNo:當前記錄號 (1 基底),新增前指向最後一筆現有記錄Abort:靜默例外,直接中斷當前操作不拋出錯誤對話框TQuery、TClientDataSet 等資料集procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
const MAX_RECORDS = 3; // 或從設定檔/資料庫讀取
begin
if Table1.RecordCount >= MAX_RECORDS then
begin
MessageDlg(Format('最多只能輸入 %d 筆記錄', [MAX_RECORDS]),
mtWarning, [mbOK], 0);
Abort;
end;
end;
| 方案 | 優點 | 缺點 |
|---|---|---|
| BeforeInsert + Abort | 簡單、原生、無需修改 UI | 僅限單表、靜態上限 |
| 資料庫層面 CHECK CONSTRAINT | 資料完整性最強、跨應用生效 | 需 DBA 權限、錯誤訊息難本地化 |
| UI 層禁用新增按鈕 | 使用者體驗佳、可動態控制 | 需同步多處 UI 狀態 |