qryTemp:=....移动到Try前面就可以了.

解决方案 »

  1.   

    qryTemp:=....移动到Try前面就可以了. 
    我当然知道,但是为何这样呢?我可是想将qryTemp:=TQuery.Create(Self);它当成可能出现异常的情况来拦截的哦!
    另外,象这样的编写风格是否有误呢?
      

  2.   

    那就在前面加个qryTemp:=nil可以吗
      

  3.   

    function TDModBill.IsEmpty: Boolean;
    begin
      with TQuery.Create(Self) do try
        Result := False;
        DatabaseName := DBName;
        UnPrepare;
        SQL.Text := 'SELECT COUNT(*) RcdConut FROM Ladbill';
        Prepare;
        Open;
        Result := FieldByName('RcdCount').AsInteger <> 0;
      finally
       Free;
      end;
    end;
      

  4.   

    function TForm1.IsEmpty: boolean;
    var qryTemp:TQuery;
    begin
    qryTemp:=TQuery.Create(Self);
    try
    result:=false;
    qryTemp.DatabaseName:='DBName';
    with qryTemp do
    begin
      Close;
      UnPrepare;
      SQL.Clear;
      SQL.Add('Select Count(*) rcdcount From Ladbill');
      Prepare;
      Open;
      if FieldByName('rcdcount').AsInteger=0 then result:=false
        else result:=true;
    end;
    finally
    qryTemp.Free;
    end;
    end;
      

  5.   

    //上边两段代码都没有问题
    //因为
    //TQuery.Create也有可能会出现异常
    //而你用try .. finally .. end
    //qryTemp.Free; 这句是不管怎样都会执行的哦
    //当TQuery.Create出现异常时执行qryTemp.Free就是非法的
    //要把qryTemp:=TQuery.Create(Self)放在try .. finally .. end前面就OK了
      

  6.   

    TO: zswang(zs) 多谢指教。
    加分。