问题描述
$(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 日期。