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;
               (
geocities.com/huanlin_tsai)