帮忙看一下下面那段程序为什么在取值的时候出错,谢谢了!type
  PMyRecord=^Myrecord;
  MyRecord=Record
    Id:string;
    Name:string
  end;
var
  Dep_EmpForm: TDep_EmpForm;implementation
uses dm;
{$R *.dfm}procedure TDep_EmpForm.FormCreate(Sender: TObject);
var
  P:PMyRecord;
  sqlstr:string;
  TreeNode1,TreeNode2:TTreeNode;
begin
  TreeNode1:=TVdep.TopItem;
  sqlstr:='select group_id,group_name from group00';
  dm.DataModule1.Result(dm.DataModule1.AllADOQuery,sqlstr);
  dm.DataModule1.AllADOQuery.First;
  while not dm.DataModule1.AllADOQuery.Eof do
  begin
    new(P);
    P.Id:=trim(dm.DataModule1.AllADOQuery.fieldbyname
               ('group_id').AsString);
    P.Name:=trim(dm.DataModule1.AllADOQuery.fieldbyname
               ('group_name').AsString);
    TreeNode2:=TVdep.Items.AddObject(TreeNode1,P.Name,P);
    TreeNode2.ImageIndex:=0;
    TreeNode2.SelectedIndex:=1;
    dispose(P);
    dm.DataModule1.AllADOQuery.Next;
  end;
  dm.DataModule1.AllADOQuery.Close;
end;procedure TDep_EmpForm.TVDepClick(Sender: TObject);
var
  group_id,Group_name:string;
begin
  group_id:=PMyRecord(TVDep.Selected.Data).Id;
  group_name:=PMyRecord(TVDep.Selected.Data).Name;
end;

解决方案 »

  1.   

    type
      PMyRecord=^Myrecord;
      MyRecord=Record
        Id:string;
        Name:string//
      end;
    没看出什么错误,就只发现这里少了个分号,不知道是不是错误的原因。
      

  2.   

    group_id:=PMyRecord(TVDep.Selected.Data)^.Id;//改成这样
      

  3.   

    还是不行啊,提示‘Read of address 00000006c'
      

  4.   

    去掉dispose(P);
    把这个放到删除节点的时候或程序结束的地方去
    当前节点的附加数据是放在这个空间里的,指针的赋值只是内存地址的赋值,即把指针指指向其他地方,数据存放的位置并没有改变