如何让TDataset存储空字符串而不是null?

时间:2013-09-26 10:22:00

标签: delphi tdataset

我的数据库中有一个必填字段(NOT NULL),但允许使用空字符串。

如何让delphi TDataset使用它?将field对象的required属性设置为true或false,它似乎仍然试图存储null而不是空字符串。

对于使用TIBDataset和TIBStringField的信息。

2 个答案:

答案 0 :(得分: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属性。

答案 1 :(得分:3)

TField具有默认值属性,但它是字符串,不幸的是空字符串表示没有默认值,因此在您的情况下它没有帮助。 但是你可以从数据集中捕获OnBeforePost事件并检查,如果field为NULL,则用空字符串设置它。