簡體   English   中英

如何通過連接到 MySQL ODBC 源的 ADO 查詢來設置 NULL 列值?

[英]How to set a NULL column value through an ADO query connected to a MySQL ODBC source in C++?

給定一個給定的 MySQL 表

DESC tabl_foo;
--------------------------------
Field            Type         Null    Key    Default    Extra
-----------------------------------------------------------------
fooId            varchar(15)  NO      PRI    NULL
FooDate          date         YES     MUL    NULL

我需要為給定的行更新FooDate 所以我嘗試了這段代碼:

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();

但是,這失敗了

日期值不正確:第 1 行的FooDate列的“”

事實證明FooDate可能是一個空字符串(或{ data:NULL } ),而 MySQL 不喜歡這樣。 所以,我嘗試設置Null()

if (FooDate.IsEmpty())
   query->Parameters->FindParam("FooDate")->Value = Null();
else
   query->Parameters->FindParam("FooDate")->Value = FooDate;

但后來我得到這個錯誤:

參數 object 定義不正確。 提供的信息不一致或不完整。

應該為 MySQL NULL設置什么值?

要進行更新,系統需要知道參數的類型。 它可以從你應用的變量中推斷出類型,MySQL 可以為你做一定的轉換,但最好指定數據類型。

所以你需要的是這樣的:

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

您可能希望將 FooDate 保留為 TDateTime,但您需要正確檢測 NULL 日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM