我有一个程序,查询一个月的数据。可是我碰到一个问题,如果我本月的数据集中有数据,那么对下个月进行查询的时候,首先运行adoquery.close,不会报错。但是,如果本月的数据集中没有数据,那么对下个月进行查询的时候,因为开始要运行adoquery.close,所以报错!
我的结论是adoquery.close进行操作时,必须保证adoquery不是空。那么,如果adoquery是空,但是我又想继续进行下面的查询,怎么样做才能避免错误发生,请高人指点!

解决方案 »

  1.   

    if adoquery1.IsEmpty then
     begin
      .....
     end
      

  2.   

    不会吧。
    打开的时候你怎么写的?
    try
      adoquery.open;
    except
      adoquery.execsql;
    end;下次打开没问题呀?
      

  3.   

    AdoQuery.Close这个不论adoquery是什么状态都不会出错。随时可以用啊。我在form1.create中连续写两句adoquery1.close也没问题的
      

  4.   

    不会吧?我每次都是:
    with adoquery do
     begin
     close;
     sql.clear;
     sql.add('select * from sub_lh');
     open;
    end;
    而我也没有在adoquery 中填任何的语句呀,都不会出错
      

  5.   

    我之前也碰到这种问题,就是当返回的数据集为空的时候,执行 Close 就会报错,我想大家也都应该会碰到这个问题才对呀。后来我是用异常把错误包起来,不知大家是怎么解决的。
    try
      ADOQuery1.Close
    except
    end;
      

  6.   

    query.close在任何情况下都没事
    包括:query:=tadoquery.create(nil);
          query.connection:=adoCnn;
          query.close;都不会出错可能是程序别的地方有错
      

  7.   

    这是我的源代码,我的设想是:当datetimepicker改变时,根据改变的月份,从而改变mon_in.caption的内容.其实程序应该很简单,可就是老出问题!
    procedure TForm3.DateTimePicker1Change(Sender: TObject);
    var
        sql:string;
        sum:double;
    begin
         sum:=0;
         form3.mon_in.Caption:='.......';
         form1.ADOQuery2.Close;//就是这个地方,当上次的sql运行为空时,就出错!
         form1.ADOQuery2.SQL.Clear;
         sql:='select imoney from income where irq='+'#'+FormatDateTime('yyyy-mm',form3.DateTimePicker1.DateTime)+'#';
         form1.ADOQuery2.SQL.Add(sql);
         form1.ADOQuery2.Open;
         while not form1.ADOQuery2.Eof do
         begin
             sum:=sum+form1.ADOQuery2.fieldbyname('imoney').asfloat;
             form1.ADOQuery2.Next;
         end;
         form3.mon_in.Caption:=FloatToStr(sum);
    end;
      

  8.   

    同时我也想把下面这个语句变成按月查询的,也就是一次取出一个月的数据,请问怎么改?
    sql:='select imoney from income where irq='+'#'+FormatDateTime('yyyy-mm',form3.DateTimePicker1.DateTime)+'#';
    谢谢!
      

  9.   

    sql :='select imoney from income where irq >='''+DateTimeToStr(firstrdate)+'''' and
     irq<='''+DateTimeToSTr(lastdate)+'''';
      

  10.   

    你可以这样解决 你的问题:
        if Adoquery1.active Then
           adoquery1.active := not adoquery1.active;要有数据积活的话你就关闭
      

  11.   

    这样也不行,会不会是mdac的问题?我是mdac2.7
      

  12.   

    调用Form1了吗?调用前创建了Form1?
      

  13.   

    调用form1了,最先创建的就是form1
      

  14.   

    问题已经解决,原因是我的平台使用的是D5环境,必须安装D5的升级补丁和ADO的两个补丁.谢谢大家帮助!