gpt4 book ai didi

delphi - Delphi 7 和 Delphi XE4 中 Null 和空字符串的区别

转载 作者:行者123 更新时间:2023-12-02 08:27:55 24 4
gpt4 key购买 nike

我有以下 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:变体;

如果anyValue = null,则null 将被插入到数据库中,这是所需的功能。

在Delphi XE4中,我正在做同样的事情:

ds1.Insert;
ds1.FieldByName('ID').AsInteger := 123;
ds1.FieldByName('FIELD_VALUE').AsString := anyValue;
ds1.Post;

我收到错误:无法将类型 (null) 的变体转换为类型 (OleStr)

当我这样尝试时

ds1.Insert;
ds1.FieldByName('ID').AsInteger := 123;
ds1.FieldByName('FIELD_VALUE').AsString := VarToStr(anyValue);
ds1.Post;

空字符串被插入到数据库中,但我需要 null 。为了完成这项任务,我应该做出什么改变以及在哪里改变。

最佳答案

您需要使用

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

而不是

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

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

关于delphi - Delphi 7 和 Delphi XE4 中 Null 和空字符串的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com