使用者插入新記錄或修改舊記錄時,必須確保輸入資料有效。Delphi 提供三種驗證層級:
建立資料表時即設定驗證機制。使用 DBD 建表時可指定欄位最大/最小值、圖形欄位顯示格式等。無需撰寫程式碼。資料寫入資料庫前由資料庫本身執行。Delphi 亦執行部分驗證(如寫入前驗證各欄位是否填入對應值)。詳參 DBD 使用說明。
兩種方法:
OnValidate 事件處理程序。每當欄位值被修改即觸發驗證。Required=True,再撰寫 OnValidate。修改或插入記錄寫入資料庫前,若必填欄位未填值則彈出錯誤提示。於 TTable 的 BeforePost 事件處理程序中進行。記錄寫回資料庫前對每個欄位值驗證。
TEdit 瀏覽 ORDERS.DB 的應用TDataSource.AutoEdit=TrueTTable 開啟 Fields Editor,選取 SaleDate 欄位OnValidate 事件撰寫:procedure TForm1.Table1SaleDateValidate(Sender: TField);
begin
if SaleDate.Value > Now then
raise Exception.Create('不能輸入一個未來的日期');
end;
執行時修改/插入記錄會驗證 SaleDate,若大於 Now 彈出錯誤提示。
建立瀏覽 orders.db 應用。Terms 欄位用 TDBComboBox,EmpNo 用 TDBLookupComboBox。
| 元件 | 屬性 | 屬性值 |
|---|---|---|
| DBComboBox1 | DataField | Terms |
| DataSource | DataSource1 | |
| Items | Prepaid; Net 30; COD | |
| DBLookupComboBox1 | DataField | EmpNo |
| DataSource | DataSource1 | |
| LookupSource | DataSource2 | |
| KeyField | EmpNo | |
| LookupField | EmpNo | |
| DataSource1 | DataSet | Table1 |
| AutoEdit | True | |
| DataSource2 | DataSet | Table2 |
| AutoEdit | True | |
| Table1 | DatabaseName | DemosDB |
| TableName | orders.db | |
| Table2 | DatabaseName | DemosDB |
| TableName | orders.db |
執行時:Terms 可從下拉選單選擇 Prepaid/Net 30/COD;EmpNo 從另一資料表 Employee 取得員工編號供選擇。