在一个函数中我创建了一个局部的 TADOQuery 对象,怎么复制这个对象? var
 A1,A2:TADOQuery;
 begin
 //创建了 A1 A2
 A1:=TADOQuery.Create(nil);
 A2:=TADOQuery.Create(nil);
 // .....在这取得了 A1  <<<<<<<<<<<<<<<<<<<<<<<<<==========
 A2:=A1; //不行
 A2.Assign(A2);//也不能,运行时错
 ......
 A1.Free; //这个是一定要执行的,所以才想要再用一个临时的
 end; 请问上面标记处<<<<<<<<<<<<<<<<<<<<<<<<<==========
 应该怎么写?
 

解决方案 »

  1.   

    A1是你的局部变量,要Free的.
    假设A1已经复制:
    A2 := TADOQuery.create(nil);
    A2.Clone(A1);
    A1.Close;
    A1.free;
    A2.open;
    A2.close;
      

  2.   


     TO: hotzhu(非洲白脸)
     非常感谢,太谢谢了,下面的我写代码,你看有问题么(现在已正常运行了),或者能简化么?下来结帖。//执行 SQL 语句返回数据集
    function TForm_Main.OpenSQL(SQL:string):TADOQuery;
    var
      ADOQuery:TADOQuery;
      returnDataSet:TADOQuery;
    begin
      //下面联数据库
      with DM do
      begin
        ADOQuery:=TADOQuery.Create(nil);
        returnDataSet:=TADOQuery.Create(nil);
        ADOConnection.Connected:=true;
        ADOQuery.ConnectionString:=ADOConnection.ConnectionString;
        ADOQuery.SQL.clear;
        ADOQuery.SQL.Add(SQL);
        ADOQuery.Open; //如果返回  表明没有更新数据,此时返回假
        returnDataSet.Clone(ADOQuery);
        ADOQuery.Close;
        ADOConnection.Connected:=false;
      end;
      result:=returnDataSet;
    end;
      

  3.   

    我把下面的
      ADOConnection.Connected:=false;
      end;
      result:=returnDataSet;
    end;改为
      ADOConnection.Connected:=false;
      end;
      ADOQuery.Free; // 这一句崩溃
      result:=returnDataSet;
    end;为什么呀?
    ADOQuery 是局部变量,用完后要释放的呀
      

  4.   

    好了,最终代码:谢谢 hotzhu(非洲白脸) 
    //执行 SQL 语句返回数据集
    function TForm_Main.OpenSQL(SQL:string):TADOQuery;
    var
      Query:TADOQuery;
      returnDataSet:TADOQuery;
    begin
      //下面联数据库
      Query:=TADOQuery.Create(nil);
      with DM do
      begin
        returnDataSet:=TADOQuery.Create(nil);
        ADOConnection.Connected:=true;
        Query.ConnectionString:=ADOConnection.ConnectionString;
        Query.SQL.clear;
        Query.SQL.Add(SQL);
        Query.Open; 
        returnDataSet.Clone(Query);
        Query.Close;
        ADOConnection.Connected:=false;
      end;
      Query.Free;
      result:=returnDataSet;
    end;