try
      tmpquery:=tadoquery.Create(nil);
      with tmpquery do
      begin
        connection:=sysdata.klerp;
        close;
        sql.Clear;
        sql.Add('select yuangmc from man_reny where bumbm=:bumbm');
        Parameters[0].Value:=str1;
        open;
        first;
        combobox2.Items.Clear;
        combobox2.Text:='';
        while not eof do
        begin
          combobox2.Items.Add(fieldbyname('yuangmc').asstring);
          next;
        end;
      end;
    finally
       freeandnil(tmpquery);这里如果改为tmpquery.free会报一个警告错误
    end;
  end;
  错误如下:

解决方案 »

  1.   

    free在释放对象要检查对象的引用是否指向为空,如为空会引发异常
    freeandnil在释放对象后会将引用该对象的变量变为nil
      

  2.   

    一般要这样写:
    tmpquery:=tadoquery.Create(nil);
    with tmpquery do
          try 
          begin
            connection:=sysdata.klerp;
            close;
            sql.Clear;
            sql.Add('select yuangmc from man_reny where bumbm=:bumbm');
            Parameters[0].Value:=str1;
            open;
            first;
            combobox2.Items.Clear;
            combobox2.Text:='';
            while not eof do
            begin
              combobox2.Items.Add(fieldbyname('yuangmc').asstring);
              next;
            end;
          end;
        finally
           freeandnil(tmpquery);这里如果改为tmpquery.free会报一个警告错误
        end;
      end;
      

  3.   

    这样写应该free or freeandnill都没问题。