for i:=0 to tvProgItem.Items.Count-1 do
 begin   RootNode:=tvProgItem.Items[i];
   if RootNode.Text ='所有项目'then
    begin
      FileDataMD.qrytmp1.Close;            //增加所有项目 及结构
      FileDataMD.qrytmp1.SQL.Text:='select ID,Name from UserVisProj where UserID='+inttostr(CurUser.ID) ;
      FileDataMD.qrytmp1.Open;
//以上都正常
      FillProjStru(TADODataSet(FileDataMD.qrytmp1),tvProgItem,RootNode);
//参数传递正常
    end;
 end;procedure Tfrmmain.FillProjStru(DataSet: TADODataSet;tree:TTreeView; tmpnode: TTreeNode); //显示项目及项目结构
var
  NodePtr: PProgNode;
  RootNode:TTreeNode;
  s:string;
begin
   tree.Items.Clear;
    with DataSet do
    begin
            while not Eof do
               begin        //添加一级节点
                s:=tmpnode.Text;
                RootNode := tree.Items.AddChild(tmpnode, DataSet.Fields.FieldByName('Name').AsString);//此句出现错误引发异常,程序不能继续运行
                New(NodePtr);
                NodePtr^.ID :=FieldByName('ID').AsInteger;                RootNode.Data := Pointer(NodePtr);
                           //添加节点的下级结构
                FileDataMD.qrytmp2.Close;
                FileDataMD.qrytmp2.SQL.Text:='select * from ProjStru';
                FileDataMD.qrytmp2.Open;
                expandproject(TADODataSet(FileDataMD.qrytmp2),tree,RootNode);
                FileDataMD.qrytmp1.Next;
               end;
    end;
   tree.FullExpand;end;tvProgItem为TTREEVIEW
RootNode为TTREENODE