首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi adoquery 子查询解决办法

2012-09-18 
delphi adoquery 子查询菜鸟问题,我在adoquery 里用了子查询 select ... from ... where (字段1) ... and

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 ,一定没问题

热点排行