【发布时间】:2014-03-03 11:33:14
【问题描述】:
我有以下 firebird 数据集:
ds1 : TpFIBDataset;
DFM 文件:
object ds1ID: TFIBIntegerField
FieldName = 'ID'
end
object ds1FIELD_VALUE: TFIBStringField
FieldName = 'FIELD_VALUE'
Size = 250
end
在我的 Firebird 数据库中:ID 是整数字段,FIELD_VALUE 是 varchar 字段。
Delphi 7:数据是这样插入的
ds1.InsertRecord([123, anyValue]);
这里anyValue : variant;
如果 anyValue = null,则将 null 插入到数据库中,这是必需的功能。
在 Delphi XE4 中,我也是这样做的:
ds1.Insert;
ds1.FieldByName('ID').AsInteger := 123;
ds1.FieldByName('FIELD_VALUE').AsString := anyValue;
ds1.Post;
我收到错误:could not convert variant of type (null) into type (OleStr)
当我这样尝试时
ds1.Insert;
ds1.FieldByName('ID').AsInteger := 123;
ds1.FieldByName('FIELD_VALUE').AsString := VarToStr(anyValue);
ds1.Post;
空字符串被插入到数据库中,但我需要空字符串。为了完成这项任务,我应该在哪里进行更改。
【问题讨论】:
-
不要转换它
AsString,然后使用Value。或者,如果TpFIBDataset支持将空字符串转换为NULL的某些设置,请使用该设置并尝试保持AsString强制转换。 -
当你说“我也在做同样的事情”时,这似乎不是真的。您的 D7 代码是
ds1.InsertRecord([123, anyValue]);。您不会在 XE4 代码中这样做。 -
@DavidHeffernan - 这么说,我的意思是我正在尝试以 Delphi XE4 方式实现相同的功能。很抱歉造成混乱。
-
@TLama - 我们可以在数据集中设置字段 FIELD_VALUE 的 EmptyStrToNull 属性,但根本不起作用。
-
ds1.FieldByName('FIELD_VALUE').Clear会将值设置为NULL,我认为
标签: delphi firebird delphi-xe4