先建立了一个tblFileWord: TADODataSet;的表,有一个过程
procedure FillTree(var DataSet: TADODataSet;Tree:TTreeView; Node: TTreeNode;key_ID:string);
但将TADODataSet传入后,过程执行的结果是正确的,但再执行
tblFileWord.close;
tblFileWord.open;
后tblFileWord记录集却没有记录了,原来有几十条,请问这是什么原因引起的呀,请高手们帮我分析分析,我真的没搞懂,怎样解决呢???

解决方案 »

  1.   

    这个参数dataSet: TAdoDataSet是引用型的参数,也就是说你在过程中对这个参数如果做过处理了,实际过程外部传入的那个ADODataSet也改了.  
    记录集没有了是不是你在过程内部对它进行了删除或其它什么处理啊?
      

  2.   


    procedure TForm2.FormCreate(Sender: TObject);
    begin
      with ADOQuery1 do begin
        if Active then Close;
        SQL.Clear;
        SQL.Add('select * from operator');
        Open;
      end;
    end;procedure TForm2.RDS(var ADODataset: TADODataset);
    begin
      self.DataSource1.DataSet := ADODataset;
    end;procedure TForm2.Button1Click(Sender: TObject);
    begin
      RDS(TADODataset(ADOquery1));
    end;procedure TForm2.Button2Click(Sender: TObject);
    begin
      ADOquery1.Close;
      ADOquery1.Open;
    end;
    我这样没有问题呀。
      

  3.   

    以下为过程的全部内容,谢谢大家procedure FillTree(var DataSet: TADODataSet;Tree:TTreeView; Node: TTreeNode;key_ID:string);
    var
      Id: Integer;
      Tmp: TTreeNode;
    begin
      if Node <> nil then
      begin
        Id := Integer(Node.Data);
        with DataSet do
        begin
          Filtered := False;
          Filter :=  key_ID+' = ' + IntToStr(Id);
          Filtered := True;
          while not Eof do
          begin
            Tmp := Tree.Items.AddChild(Node, Fields.FieldByName('name').AsString);
            Tmp.Data := Pointer(Fields.FieldByName('ID').AsInteger);
            Next;
          end;
          Tmp := node.getFirstChild;
          while tmp <> nil do
          begin
            FillTree(DataSet,Tree,Tmp,key_ID);
            tmp := tmp.getNextSibling;
          end;
        end;
      end;end;
      

  4.   

    其它地方没有对Adodataset操作吗,看你这个函数好像对Adodataset没有什么影响呀
      

  5.   

    绝对没有,我就只在此处对Adodataset进行了访问,其它地方都没有