我有一个以下的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;
空字符串被插入数据库,但我需要null。我应该做些什么以及在哪里做出改变来完成这项任务。
答案 0 :(得分:4)
您需要使用
ds1.FieldByName('FIELD_VALUE').Value := anyValue;
而不是
ds1.FieldByName('FIELD_VALUE').AsString := anyValue;
这个delphi版本有一些区别。从delphi2006开始,还有另一个更精确的内存管理器。在delphi 7及更低版本的示例中,您可以将NULL分配给字符串或整数值。与0比较NULL将返回true。在更大的版本中,你不能这样做。 Null不等于0或空字符串。