如何通过连接到 C++ 中 MySQL ODBC 源的 ADO 查询设置 NULL 列值?

问题描述

给定一个给定的 MysqL

$(group1,group2,group3)

我需要更新给定行的 DESC tabl_foo; -------------------------------- Field Type Null Key Default Extra ----------------------------------------------------------------- fooId varchar(15) NO PRI NULL FooDate date YES MUL NULL 。所以我尝试了这段代码

FooDate

然而,这失败了

不正确的日期值:第 1 行 query->sql->Add("UPDATE tbl_foo SET FooDate = :FooDate WHERE fooId = :id"): // both arguments are AnsiString query->Parameters->FindParam("id")->Value = FoodId; query->Parameters->FindParam("FooDate")->Value = FooDate; query->Execsql(); 列的“”

事实证明,FooDate 可能是一个空字符串(或 FooDate),而 MysqL 不喜欢这样。所以,我尝试设置 { data:NULL } :

Null()

但后来我收到此错误

参数对象定义不正确。提供的信息不一致或不完整。

应该为 MysqL if (FooDate.IsEmpty()) query->Parameters->FindParam("FooDate")->Value = Null(); else query->Parameters->FindParam("FooDate")->Value = FooDate; 设置什么值?

解决方法

为了进行更新,系统需要知道参数的类型。它可以从你应用的变体中推导出类型,MySQL 可以为你做一些转换,但最好总是指定数据类型。

所以你需要的是:

  if((pParam=query->Parameters->FindParam("FooDate"))!=NULL)
  {
    pParam->DataType=ftDate;
    if(FooDate.IsEmpty())
    {
      pParam->Value=Null();
    }
    else
    {
      pParam->Value=FooDate;
    }
  }

您可能希望将 FooDate 保留为 TDateTime,但您需要正确检测 NULL 日期。