如何在Delphi中创建类似item1,item2,item3格式的SQL查询?

时间:2013-12-11 08:51:04

标签: sql delphi delphi-xe3

我在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中的选定组返回数据?

2 个答案:

答案 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;