我的数据表4个字段 id(节点唯一) name parentid(以id为父节点) level是层数
我已经把数据库的表显示到treeview上了 我现在想做一个点击节点获取节点的id 
首先我定义了:
pnotedata=^Tnotedata;
Tnotedata=record
name,id:string;
end;
var里我定义noteptr:Tnotedata;
notepid:string;
我在click函数中这样写的:
procedure TForm9.TreeView1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to treeview1.Items.Count-1 do
if treeview1.Items[i].Selected=true then
begin
if treeview1.Items[i].Level=0 then
begin
noteptr:=treeview1.Items[i].Data;
nodeid:=noteptr^.id;
edit1.Text:=treeview1.Items[i].Text;
end;
运行出现access violation 错误,在线求高手们高手给我举个例子写一遍 不胜感激

解决方案 »

  1.   

    每个treeview1.Items[i].Data都要分配内存Tnotedata,估计你是没分配导致的,
    这样作,如果必须手工释放分配的内存,建议把数据记录的ID直接给treeview1.Items[i].Data,
    当点的时候,直接把这个treeview1.Items[i].Data当成ID来使用就行了.
      

  2.   

    while not AdoQuery1.eof do begin
      with treeview1.Items.AddChild..(..) do begin
        Data := Ptr(AdoQuery1.Fields[..].AsInteger);
        Text := Trim(AdoQuery1.Fields[..].AsString);
        ..
      end;
      AdoQuery1.Next;
    end;
    取的时候,直接
      IntToStr(Integer(treeview1.Items[i].Data));即可
      

  3.   

    Data := Ptr(AdoQuery1.Fields[..].AsInteger);
    这句话incompatible type integer and string,类型错了,怎么改