将数据库值设置为NULL

时间:2018-11-05 18:11:29

标签: c++ sqlite null firedac

我有一个SQLite double字段,用于显示日期。该字段没有默认值。当没有输入日期时,我需要将该字段值设置为NULL,因为当该字段显示为日期时,它显示为“ 12/30/1899”。由于某些原因,我无法将该字段设置为NULL。我正在使用C ++ Berlin 10.1。这是代码:

FDQuery1->First();
while (!FDQuery1->Eof) {
    if (!VarIsNull(FDQuery1->FieldByName("DateLeft")->Value))
        if (FDQuery1->FieldByName("DateLeft")->Value < 100) {
            FDQuery1->Edit();
            FDQuery1->FieldByName("DateLeft")->Value = NULL;
            FDQuery1->Post();
        }
    FDQuery1->Next();
}
运行此代码后,

“ FDQuery1-> FieldByName(” DateLeft“)-> Value”仍为0。

如何将值设置为NULL?

1 个答案:

答案 0 :(得分:1)

这个问题似乎真的是关于FireDAC的,这是您在C ++中用于与数据库接口的技术。那个数据库到底是什么(SQLite或其他)并不重要。

The official documentation I found并没有多大帮助,但是我们已经可以假定,像这样编写C宏NULL并不能满足您的要求。那是C代码的实用程序,当转换为数字时,它是

FireDAC库不可能注意到您给了表达式NULL而不是0,因为表达式NULL没有任何类型信息,也就是说(充其量只能是void*,因此您可能会得到一些奇怪的类似于字符串的语义-这就是为什么在C ++ 11中添加nullptr的原因。)

因此,NULL不是适合该工作的工具。是的,我知道SQL具有一个名为NULL的关键字,该关键字看起来相同并且可以执行SQL查询中所需的操作,但是我们不是在编写SQL。我们正在编写C ++。这样我们就可以忘记了。

我发现一些旧的Delphi chatter似乎在讨论相同(或相似)的接口,并建议在字段上使用Clear()方法来擦除其值,从而隐式地使其为“ null”。 / p>

去吧。

所以,像这样:

FDQuery1->FieldByName("DateLeft")->Clear();