Q:Interbase 並沒有提供布林型態的欄位,如何解決? A:利用 domain: CREATE DOMAIN BOOLEAN AS CHAR(1) CHECK (VALUE IN ("T","F")) NOT NULL; 至於 data-aware control 則仍是使用 TDBCheckBox, 只不過要把 ValueChecked 及 ValueUnchecked 分別設為 'T' 及 'F' 即可。 如果你的布林欄位需要顯示在 DBGrid 中,而且你所使用的 DBGrid 能夠將 布林欄位以 CheckBox 的樣式顯示出來的話,你可以利用 Calculated field 建立真正的布林欄位供顯示之用。例如: procedure TDmod.tbleEmpCalcFields(DataSet: TDataSet); begin DataSet.FieldByName('CalcSex').AsBoolean := DataSet.FieldByName('Sex').AsBoolean; // 注意此處欄位 Sex 雖然實際上為 'T' 或 'F', 但使用 AsBoolean // 一樣可以得到正確值 end; 如果這樣還嫌不夠,你希望能夠以滑鼠點選 DBGrid 上的 CheckBox 來修改 該欄位的值,你可以在計算欄位的 OnChange 事件中設定真正的資料欄位值。 而為了避免發生無限遞回的情形,你必須在指定資料欄位值的時候先關閉 AutoCalcFields,參考下面的程式碼: procedure TDmod.tblEmpCalcSexChange(Sender: TField); begin Sender.DataSet.AutoCalcFields := false; if Sender.AsBoolean then Sender.DataSet.FieldByName('Sex').AsString := 'T' else Sender.DataSet.FieldByName('Sex').AsString := 'F'; Sender.DataSet.AutoCalcFields := true; end;