[英]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.