2013-09-26 23 views
0

我有我的數據庫中的必填字段(NOT NULL),但允許空字符串。如何獲得一個TDataset來存儲空字符串而不是null?

我該如何得到一個delphi TDataset來處理這個問題?將field對象的必需屬性設置爲true或false,它似乎仍然試圖存儲null而不是空字符串。

對於使用TIBDataset和TIBStringField的信息。

回答

4

通常情況下,你可以在OnBeforePost這樣的設定值:

if IBDataSet1.FieldByName('OPTION_TEXT').IsNull then 
begin 
    IBDataset1.FieldByName('OPTION_TEXT').Value = ''; 
end; 

然而,TIBStringField有一個未公開的特性EmptyAsNull,你必須設置爲False。默認值是True。當啓用此功能後,該數據集幫你的忙,並轉換爲空字符串NULL

你可以關閉它是這樣的:

if IBDataSet1.FieldByName('OPTION_TEXT').IsNull then 
begin 
    TIBStringField(IBDataset1.FieldByName('OPTION_TEXT')).EmptyAsNull := False; 
    IBDataset1.FieldByName('OPTION_TEXT').Value = ''; 
end; 

或者,你可以設置EmptyAsNull屬性的字符串字段如果您使用的是靜態(設計時間)字段,或者您創建字段的位置,則在表單的OnCreate中。

3

TField的屬性爲默認值,但它是字符串,不幸的是空字符串意味着沒有默認值,所以它對你的情況沒有幫助。 但是您可以從數據集中捕獲OnBeforePost事件並檢查,如果field爲NULL,則使用空字符串進行設置。

+0

我該怎麼做?在OnBeforePost例程中,我添加了這個; if IBDataset1.FieldByName('OPTION_TEXT')。IsNull then IBDataset1.FieldByName('OPTION_TEXT')。Value:=''; – srayner

+0

@srayner是的,它應該是足夠的。 –

+0

對不起,我忘記補充說這不起作用,因爲是給OPTION_TEXT列'驗證錯誤,'*** *** null ***'' – srayner

相關問題