在动态查询中使用AdoQuery结果的问题

Description of your first forum.

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期日, 2004年9月19日 10:29


问题:有两个AdoQuery1、AdoQuery2
AdoQuery1:
   With AdoQuery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from a');
        open;
      end;
AdoQuery2:
  With AdoQuery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from AdoQuery1');
        open;
      end;
其中:sql.add('select * from AdoQuery1');出错,请教如何处理?
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子ava » 星期日, 2004年9月19日 10:34


'select * from (select * from a) aa'
首先你的数据库必须支持嵌套语句.
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子WoDing » 星期日, 2004年9月19日 15:56


AdoQuery1:
   With AdoQuery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from a');
        open;
      end;
AdoQuery2:
  With AdoQuery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from ('+ADOQuery1.sql.text+')as TableA');
        open;
      end;
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子WoDing » 星期日, 2004年9月19日 15:57


要注意的是ADOQuery1.sql.text中不能包含order by子句,这个在SQL SERVER中是不充许的
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子cnzzlp » 星期日, 2004年9月19日 16:54


数据已经关闭,应该不能再返回结果了吧

AdoQuery2:
  With AdoQuery1 do
      begin
       // close;去掉这行试试;
        sql.clear;
        sql.add('select * from ('+ADOQuery1.sql.text+')as TableA');
        open;
      end;
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子jman168 » 星期日, 2004年9月19日 17:04


我试了,WoDing,ava都可以。
>>>借这块宝地问个问题。
>>>把AdoQuery1当前行插入到AdoQuery2中。有没有什么简便的方法。
  
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期二, 2004年9月21日 23:30


谢谢WoDing,ava。
进一步的问题是:如果AdoQuery1带参数,例如:
 AdoQuery1:
   With AdoQuery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from a where aaa=:b');
        parameters.parambyname('b').value:=xxx;
        open;
      end;
AdoQuery2:
  With AdoQuery2 do
      begin
        close;
        sql.clear;
        sql.add('select * from ('+ADOQuery1.sql.text+')as TableA');
        open;
      end;
好像不行?
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期二, 2004年9月21日 23:57


完整的案例如下:
 已知:应收帐款的明细表,求某一日期XXX时的应收帐款的帐龄分析表
       (余额从xxx为止在30天、60天、90天、90天以上的分布情况)
    with ADOQuery1 do
    begin
      close;
      sql.Clear ;
      sql.Add('SELECT 客户, 余额,');
      sql.Add('三十天= case  when (应收日期>=:date1-30) and (应收日期<:date1)  then 余额  else 0.00 end,');
      sql.Add('六十天= case  when (应收日期>=:date1-60) and (应收日期<:date1-30)  then 余额  else 0.00 end,');
      sql.Add('九十天= case  when (应收日期>=:date1-90) and (应收日期<:date1-60)  then 余额  else 0.00 end,');
      sql.Add('九十天以上= case  when (应收日期<:date1-90)  then 余额  else 0.00 end,');
      sql.Add('总计=case  when 应收日期<:date1  then 余额  else 0.00 end');
      sql.Add('FROM 应收帐款余额');
      parameters.parambyname('date1').value:= xxx;
      open;
    end;
  with ADOQuery2 do
    begin
      close;
      sql.Clear ;
      sql.Add('SELECT 客户,  SUM(三十天) AS 三十天, SUM(六十天) AS 六十天,');
      sql.Add('SUM(九十天) AS 九十天,SUM(九十天以上) AS 九十天以上,sum(总计) as 总计');
      sql.Add('FROM ('+adoQuery2.sql.text+') as table1  group by 客户');
      //adoQuery2.parameters.parambyname('date1').value:= xxx;
      open;
    end;
结果出现错误:不正确地定义参数对象。提供了不一致或不完整的信息。
到底是Case when then 不能使用参数呢,还是Adoquery2使用Adoquery1时(嵌套查询)不能使用参数?
如何解决这个帐龄问题?(有完整答案的高手得满分)
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期三, 2004年9月22日 00:14


现场讨论ing
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子gzbxmcx » 星期三, 2004年9月22日 00:49


来晚上,楼上的回答完全正确。
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期三, 2004年9月22日 17:26


请高手帮助
 
 
 

在动态查询中使用AdoQuery结果的问题

帖子hqp2004 » 星期四, 2004年9月23日 08:13


现场请教中......