定义了一个全局变量
type
pNodeData = ^TNodeData;
TNodeData = Record
sDatabaseFilePath: string;
nIndex: integer;
end;
在窗体激活的时候从表中将数据加载到一个TREEVIEW中,并记录一个信息在TREEVIEW的每个结点的DATA中。
procedure Tfm_Main.FormActivate(Sender: TObject);
var
NewNode1, NewNode2: TTreeNode;
sqlString, DatabaseName: String;
i: integer;
p: pNodeData;
s: ^string;
begin
with TreeView1 do
begin
Items.clear;
Items.AddFirst(nil,ServerName);
Items[0].ImageIndex := 16;
with dm_Main.qry_DabataseList do
begin
SQL.Clear;
SQL.Add('select name, filename from databases order by name');
Open;
First;
while not Eof do
begin
New(p);
p^.sDatabaseFilePath := trim(Fields[1].AsString);
p^.nIndex := 1;
NewNode1 := Items.AddChildObjectFirst(Items[0], trim(Fields[0].AsString), p);
NewNode2 := Items.AddChild(NewNode1, 'User'); with dm_Main.qry_TableList do
begin
sqlString := 'select name from object order by name';
SQL.Clear;
SQL.Add(sqlString);
Open;
First;
while not Eof do
begin
Items.AddChild(NewNode2, trim(Fields[0].AsString));
Next;
end;
end;
Next;
end;
end;
Dispose(P);
end;end;
当点击根节点的时候报错:Access violation at address .......
当点击二级节点的时候有的节点会报错,有的节点又正常:报错信息为:Invalidpointerr operation.procedure Tfm_Main.TreeView1Click(Sender: TObject);
var
p: pNodeData;
begin
if p <> nil then
begin
new(p);
p := Treeview1.Selected.Data;
StatusBar1.Panels[3].Text := p^.sDatabaseFilePath;
end;
Dispose(P);
end;是何原因?
type
pNodeData = ^TNodeData;
TNodeData = Record
sDatabaseFilePath: string;
nIndex: integer;
end;
在窗体激活的时候从表中将数据加载到一个TREEVIEW中,并记录一个信息在TREEVIEW的每个结点的DATA中。
procedure Tfm_Main.FormActivate(Sender: TObject);
var
NewNode1, NewNode2: TTreeNode;
sqlString, DatabaseName: String;
i: integer;
p: pNodeData;
s: ^string;
begin
with TreeView1 do
begin
Items.clear;
Items.AddFirst(nil,ServerName);
Items[0].ImageIndex := 16;
with dm_Main.qry_DabataseList do
begin
SQL.Clear;
SQL.Add('select name, filename from databases order by name');
Open;
First;
while not Eof do
begin
New(p);
p^.sDatabaseFilePath := trim(Fields[1].AsString);
p^.nIndex := 1;
NewNode1 := Items.AddChildObjectFirst(Items[0], trim(Fields[0].AsString), p);
NewNode2 := Items.AddChild(NewNode1, 'User'); with dm_Main.qry_TableList do
begin
sqlString := 'select name from object order by name';
SQL.Clear;
SQL.Add(sqlString);
Open;
First;
while not Eof do
begin
Items.AddChild(NewNode2, trim(Fields[0].AsString));
Next;
end;
end;
Next;
end;
end;
Dispose(P);
end;end;
当点击根节点的时候报错:Access violation at address .......
当点击二级节点的时候有的节点会报错,有的节点又正常:报错信息为:Invalidpointerr operation.procedure Tfm_Main.TreeView1Click(Sender: TObject);
var
p: pNodeData;
begin
if p <> nil then
begin
new(p);
p := Treeview1.Selected.Data;
StatusBar1.Panels[3].Text := p^.sDatabaseFilePath;
end;
Dispose(P);
end;是何原因?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货