我在Delphi中使用CheckListEdit
组件,可以选择多个项目。当使用CheckListEdit1.Text提取时,我得到的字符串格式中的选定项目如[item1, item2, item3]
,我进一步修剪以丢弃第一个和最后一个字符,以获得最终字符串'item1,item2,item3'。
我的代码如下
glist := CheckListEdit1.Text;
glistindex := Length(glist);
Delete(glist,glistindex,1);
Delete(glist,1,1);
//这里我得到了glist ='item1,item2,item3 ..'等等。
现在我想从表中的数据中选择item1,item2,item3等组。
我的SQL查询如下
UniTable1.SQL.Text := Select * from emp where group like (:grp);
UniTable1.Params.ParamByName('grp').Value := glist;
但是上面的SQL返回错误,因为'like item1,item2,item3'不是一个正确的格式是否有任何改变方法来创建SQL查询,以便它将从CheckListEdit中的选定组返回数据?
答案 0 :(得分:2)
不是将字符串构建为'item1,item2,item3',而是需要将其构建为'(item1,item2,item3)'。然后您的查询将变为
Select * from emp where group in (item1, item2, item3)
正如whosrdaddy指出的那样,你必须将查询构建为串联字符串;无法将值列表作为参数传递。
答案 1 :(得分:2)
在IN运算符中使用参数不正确。您应该使用IN参数列表(:p1,:p2,...,:pN)或使用宏:
UniQuery.SQL.Text := 'Select * from emp where group in (&grp)';
UniQuery.MacroByName('grp').AsString := glist;
UniQuery.MacroByName('grp').Active := true;