BCB界面Edit控件内容时,如何使其对应的字段跳过update的set设置
请问:我现在update语句涉及到从界面上edit控件里取数据;
要达到的效果是:如果formshow的时候,edit控件内容若为空,就不set此edit控件对应的字段
现在界面有10个Edit控件,我该怎么拼sql语句,才能在update时,跳过set为空的edit对应的字段呢
[解决办法]
AnsiString SQLStr = "update test set ";if(!Edit1->Text.IsEmpty())SQLStr = SQLStr + "test1 = "+Edit1->Text;if(!Edit2->Text.IsEmpty())SQLStr = SQLStr + ", test2 = "+Edit2->Text;if(!Edit3->Text.IsEmpty())SQLStr = SQLStr + ", test3 = "+Edit3->Text;.........
[解决办法]
zzb的代码有逻辑漏洞,如果Edit1的内容为空,那么,拼起来的SQL语句是非法的。
String strSQL = "update 表名 set ";if (!Edit1->Text.Trim().IsEmpty()) strSQL += String().sprintf(TEXT("字段1=%s,"), Edit1->Text);if (!Edit2->Text.Trim().IsEmpty()) strSQL += String().sprintf(TEXT("字段2=%s,"), Edit2->Text);if (!Edit3->Text.Trim().IsEmpty()) strSQL += String().sprintf(TEXT("字段3=%s,"), Edit3->Text);...// 删掉最后的逗号if (strSQL[strSQL.Length()] == ',') strSQL = strSQL.SubString(1, strSQL.Length() - 1);// 显示拼接完成的SQL语句ShowMessage(strSQL);
[解决办法]
另外还要补充一下:
以上的SQL语句中,假设字段是数字类型的。如果对应的字段是字符串类型或时间类型的,那么需要这样:
if (!Edit2->Text.Trim().IsEmpty())
strSQL += String().sprintf(TEXT("字段2='%s',"), Edit2->Text);
另外还要注意,如果10个Edit中都为空,则拼接完的SQL语句,最后需要判断一下长度,如果小于等于一开始strSQL字符串的长度,说明set后面没有拼接字符串,则可以认为放弃这个操作。