用Bde TQuery查询数据 返回太约60000条时
  再查询  查询会 把上一次查询的语加进去
  有谁能解释一下这个问题吗?(查了三天了)  with qry_temp do
  begin
    close;
    sql.clear;
    sql.Text :=('select *,nHs=1 from v_Member_ClientInteger where nMemberId=2');
    open;
  end;  -->这里返回60000多条数据       再查询 速度奇慢! 发现执行这个语句时用sql 事件探测器发现  下面这个语句执行了两条语句   (select *,nHs=1 from v_Member_ClientInteger where nMemberId=2)
   (select 11)
  with querywork do
  begin
    close;
    sql.clear;
    sql.Text :=('select ''11''');
    open;
  end;
  为什么执行qry_temp  会去执行 querywork 的语句
  如果只返回几百条则不行出这样的问题

解决方案 »

  1.   

    你是说再次查询
    sql事件跟踪器会把上次查询的语句再加进去。。
    不大可能吧。
    我用ADO测试了没有加进去。而且速度也比BDE快一倍
    而且BDE查询数据少时怎么不会把上次查询的语句再加进去?
      

  2.   

    老项目我也不想用BDE
    但是现在不可以改Ado了大麻烦了
      

  3.   

    ShowMessage(sql.Text);
    看看就知道了!
      

  4.   

    Delphi syntax:property SQL: TStrings;
    可以采用楼上的用ShowMessage(sql.Text);测试
    假定你每次都是如下写的,那不会sql叠加,(因为有个sql.clear;)with querywork do 
      begin 
        close; 
        sql.clear; 
        sql.Text :=('select ''11'''); 
        open; 
      end; 
     
    但是如果缺少此句子(不知道你下面这句是怎么增加到sql的
    (select *,nHs=1 from v_Member_ClientInteger where nMemberId=2) 
      (select 11) 
    估计你这是直接用sql.add();
    自己再测试下
      

  5.   


    我敢保证绝对不是delphi 语法逻辑错误 绝对有Sql.clear ,
    show 出来语句没有问题 而且我查询时不是在同一个Query中查询
    (一个是qry_temp  ,另一个是querywork  )我怀疑是不是 BDE 的Database 处理大量数据问题
      

  6.   

    qry_temp,querywork里是否有其中一个设置了DataSource属性在两个Query里的AfterOpen事件中,分别加上
    ShowMessage(qry_temp.SQL.Text);

    ShowMessage(querywork.SQL.Text);
    当你按了查询之后,如果发现Show出来的跟你
    在sqlmon查看的是不一样的话,啊我就无语了,
    到时候你最好截个图给大家看看!