delphi adoquery 子查询
菜鸟问题,我在adoquery 里用了子查询 select ... from ... where (字段1)= ... and (字段2) in (select .. from .. where ...) group by ...
数据库为access,两个表在同一个数据库里,代码如下:
sql_str:= 'SELECT tf_grade as 等级, count(tf_batchid) AS 数量,count(tf_batchid)*100/:S0 AS 百分比 ';
sql_str:=sql_str + 'FROM after_gradedata WHERE (tf_batchid=:S1) and (tf_trayid in ';
sql_str:=sql_str + '(select tf_trayid from tray_index where tf_batchid =:S2 ))';
adoquery6.SQL.Add(sql_str);
adoquery6.SQL.Add('group by tf_grade');
showmessage(adoquery6.SQL.Text );
adoquery6.Parameters [0].Value :=strtoint(Labelcellcount.Caption);
adoquery6.Parameters [1].Value :=trim(edit2.Text );
adoquery6.Parameters [2].Value :=trim(edit2.Text );
adoquery6.Active :=true;
adoquery6.Open ;
在access 里是可以查到的,可在delphi 里,结果却什么都没有,不知哪里有错.
[解决办法]
不要用 Parameters ,很多情况下,Delphi 的 Parameters 都是按数据库字段的字节对齐的( 例如一个 aa char(5) 的字段,你传一个值 'ab', 实际上它会补上空格),即使你用 trim 也可能有问题 .
所以,你直接用 sql_str:= '...' 全部写成 sql ,一定没问题