Delphi 7和Delphi XE4中Null和Empty字符串的区别

时间:2014-03-03 11:33:14

标签: delphi firebird delphi-xe4

我有一个以下的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。我应该做些什么以及在哪里做出改变来完成这项任务。

1 个答案:

答案 0 :(得分:4)

您需要使用

ds1.FieldByName('FIELD_VALUE').Value := anyValue;

而不是

ds1.FieldByName('FIELD_VALUE').AsString := anyValue;

这个delphi版本有一些区别。从delphi2006开始,还有另一个更精确的内存管理器。在delphi 7及更低版本的示例中,您可以将NULL分配给字符串或整数值。与0比较NULL将返回true。在更大的版本中,你不能这样做。 Null不等于0或空字符串。