type里面有
TResServer = record
ID: Integer;
Name: string;
end;
presserver = ^TResServer;
var里面有
ResServer: array of presserver;
以上声明或定义等都是全局的。
下面这段过程跑不过
procedure ExstCa
var
i: integer;
TrNode: TTreeNode;
begin
for i:= 0 to Length(VaArry)-1 do begin
setlength(ResServer, i + 1);
New(ResServer[i]);
ResServer[i]^.ID := VaArry[i].id;//全局记录数据VaArry在此过程前创建并赋了值
ResServer[i]^.Name := VaArry[i].Name;
//ShowMessage(IntToStr(ResServer[i]^.ID));
//ShowMessage(ResServer[i]^.Name);
TrNode := VODTrV.Items.Add(nil, VaArry[i].Name); //VODTrV为TTreeView控件
TrNode.Data := ResServer[i];
ShowMessage(inttostr(presserver(TrNode.Data)^.ID));
end;
end;
我的目的是:VODTrV控件的每个节点的data对应记录指针。想用此节点的data对应的指针对应的记录。
上面的ShowMessage是用来测试的,跑不过。请问是什么原因????
TResServer = record
ID: Integer;
Name: string;
end;
presserver = ^TResServer;
var里面有
ResServer: array of presserver;
以上声明或定义等都是全局的。
下面这段过程跑不过
procedure ExstCa
var
i: integer;
TrNode: TTreeNode;
begin
for i:= 0 to Length(VaArry)-1 do begin
setlength(ResServer, i + 1);
New(ResServer[i]);
ResServer[i]^.ID := VaArry[i].id;//全局记录数据VaArry在此过程前创建并赋了值
ResServer[i]^.Name := VaArry[i].Name;
//ShowMessage(IntToStr(ResServer[i]^.ID));
//ShowMessage(ResServer[i]^.Name);
TrNode := VODTrV.Items.Add(nil, VaArry[i].Name); //VODTrV为TTreeView控件
TrNode.Data := ResServer[i];
ShowMessage(inttostr(presserver(TrNode.Data)^.ID));
end;
end;
我的目的是:VODTrV控件的每个节点的data对应记录指针。想用此节点的data对应的指针对应的记录。
上面的ShowMessage是用来测试的,跑不过。请问是什么原因????
解决方案 »
- 如何用代码实现窗口的最大化和恢复
- 在类方法中如何调用私有函数?
- delphi2007怎么安装delphi7的第三方控件
- 为什么新建的 Access表 会查不到?
- delphi程序怎么打包呀!
- 有段代码有问题,卡死在这了,各位高手大哥帮忙啊
- 如何设置和修改showmessage或者messagebox这类对话框的字体大小和窗体的大小?
- 怎样让delphi的程序自动监测到系统中的USB闪存(U盘),多谢了!
- delphi 利用回调函数调用VC编写的dll
- 偶近日作单机版的mis,想用batchmove备份数据库,但偶不会,谁肯教教偶,学费你开个价//牛虻
- 〓〓〓菜鸟问题:VCLSkin下载后全都是*.skn文件,怎么用啊?〓〓〓
- 请问大家,如何用ReportMachine 实现多重分组打印啊!!!先谢谢了
procedure ExstCa漏了;
(复制过来时小错误,程序代码里没有漏这个;)
前面两个ShowMessage跑得过的。
数据表结构最好设计成如下: id name .... parent_id
1 ..... 0
2 ..... 1
3 ..... 1
.....这样用递归写代码很容易的。如:
Pbmdata = ^TbmData;
TbmData = record
id :integer;
name :string;
parent_dm :integer;
if_end :boolean;
End;//写根节点
new(mybm);
mybm.id:=q.fieldbyname('id').AsInteger;
mybm.name:=q.fieldbyname('name').AsString;
// mybm.cs:=q.fieldbyname('cs').AsInteger;
mybm.if_end:=q.FieldByName('if_end').AsBoolean;
mybm.parent_dm:=q.fieldbyname('parent_dm').AsInteger;
//写户籍树
insert_tv(tv_1.Items.AddChildFirst(nil,mybm.name),mybm.id);
procedure Tmainform.insert_tv(toptree:Ttreenode;id:integer);
// 从父节点开始递归写数据
var
midtree:ttreenode;
mybm :pbmdata;
q1,q2:tadoquery;
begin
q1:=tadoquery.Create(self);
q1.Connection:=dmform.ADOConnection1;
q2:=tadoquery.Create(self);
q2.Connection:=dmform.ADOConnection1;
q1.SQL.Add('select * from aa where parent_dm='+inttostr(id));
q1.Prepared;
q1.Open;
if q1.Eof then exit;
while not q1.Eof do
begin
new(mybm);
mybm.id:=q1.fieldbyname('id').AsInteger;
mybm.name:=trim(q1.fieldbyname('name').AsString);
// mybm.cs:=q1.fieldbyname('cs').AsInteger;
mybm.if_end:=q.FieldByName('if_end').AsBoolean;
mybm.parent_dm:=q1.fieldbyname('parent_dm').AsInteger;
midtree:=tv_1.Items.AddChildObject(toptree,mybm.name,mybm);
q2.SQL.Clear;
q2.SQL.Add('select * from aa where parent_dm='+inttostr(mybm.id));
q2.Prepared;
q2.Open;
if not q2.Eof then insert_tv(midtree,mybm.id);
q2.Close;
q1.Next;
end;
q1.Destroy;
q2.Destroy;
end; 发要详细代码,与QQ:549711582联系