【发布时间】:2021-04-23 17:40:27
【问题描述】:
给定一个给定的 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;
然后我得到这个错误:
参数对象定义不正确。提供的信息不一致或不完整。
应该为 MySQL NULL 设置什么值?
【问题讨论】:
-
使用像'9999-01-01'这样的日期空日期总是复杂的
-
只是为了检查一下 - 你每次都在
Clear()'ingSQL吗?把query->SQL->Add("UPDATE ...");换成query->SQL->Text = "UPDATE ...";会不会有同样的问题? -
你试过用
Unassigned()代替Null()吗? -
会尝试 ...FindParam("FooDate")->Value = "NULL";
-
@Baxter 这将分配一个字符串值
"NULL",而不是真正的NULL。如果该列不支持字符串,那将失败
标签: c++ mysql c++builder ado vcl