我已将以下查询创建为过滤器命令。但它仅适用于整数字段。似乎每当该字段是一个字符串时,它都不起作用。

我不断收到的错误是'SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like'%a%''at line 1'

我的代码如下:

datalive.mail_queue.SQL.Text:='select*from mail_queue where user_id=:user_id and '+fieldname+' like :value';
Addparam(datalive.mail_queue,'user_id',ftString,inttostr(user_id));
Addparam(datalive.mail_queue,'fieldname',ftString,fieldname);
Addparam(datalive.mail_queue,'value',ftString,'%'+edit1.Text+'%');
datalive.mail_queue.Active:=true;

最佳答案

问题似乎出在查询字符串中,就像在传递连接字符串的参数之前一样,因此我建议您以这种方式更改查询字符串:

datalive.mail_queue.SQL.Text:=' select * from mail_queue where user_id=:user_id and '+fieldname+' like :value';


您不必传递参数fieldname,因为它是列而不是值:

Addparam(datalive.mail_queue,'user_id',ftString,inttostr(user_id));
Addparam(datalive.mail_queue,'value',ftString,'%'+edit1.Text+'%');


确保fieldname变量不包含带引号的字符串,而仅包含要过滤的列名...

10-05 22:15