str = 'select * from t1 a' +
'left outer join t2 b on a.id=b.id'+
'left outer join t3 c on a.id=c.id'+
'where c.field like :v1' ;
adoquery.sql.clear;
adoquery.sql.add(str) ;
adoquery.parameters.paramvalues['v1'] := '%查询条件%';
adoquery.open;无法查到任何数据,如果直接赋值就可以:
str = 'select * from t1 a' +
'left outer join t2 b on a.id=b.id'+
'left outer join t3 c on a.id=c.id'+
'where c.field like ''%查询条件%''' ;
adoquery.sql.clear;
adoquery.sql.add(str) ;
adoquery.open;问题出在,生成的参数,adoquery无法获取参数长度,只有参数赋值是才分配长度,如字符串“查询条件”,adoquery设置参数长度为4,当执行语句时,就变成 '%查询' ,查不到所要数据.
当
ADOQuery.Parameters[0].Size := 50;
后,查询结果正确。
在使用 Delphi 的 ADOQuery 进行带参数的 SQL 查询时遇到问题,当使用 :v1 参数形式无法查到数据,原因是 ADOQuery 未能正确获取参数长度。解决方法是在设置参数值前,明确指定参数的大小,例如 ADOQuery.Parameters[0].Size := 50,确保字符串参数完整,从而避免查询错误。
2601

被折叠的 条评论
为什么被折叠?



