1用Access建一个数据库 数据库名book 表名bk 字段如下
id caption parentid
1 书籍列表 0
2 文学 1
3 计算机技术 1
4 三重门 2
5 编程 3
6 Java 5
7 C 5
2窗体上放置一个ADOConnection控件,设置connectionstring和LoginPrompt属性。
3编写代码如下
var
Form2: TForm2;
root:TTreeNode;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
if root=nil then
root:=TTreeNode.Create(treeview1.Items);
end;
procedure TForm2.InitGroup(parentid: integer; root: TTreeNode);
var
node:TTreeNode;
ADOQuery:TADOQuery;
begin
ADOQuery:=TADOQuery.Create(nil);
ADOQuery.Connection:= ADOConnection1;
try
with ADOQuery do
begin
close;
sql.Clear;
sql.Text:='select * from bk where parentid='+IntToStr(parentid);
Open;
First;
while not eof do
begin
node:=Treeview1.Items.AddChild(root,Fields[1].AsString);
node.Data:=Pointer(Fields[0].AsInteger);
InitGroup(Fields[0].AsInteger,node);
next;
end;
end;
finally
ADOQuery.Free;
end;
end;
procedure TForm2.FormActivate(Sender: TObject);
var
node1:TTreeNode;
begin
with treeview1 do
begin
Items.Clear;
Items.BeginUpdate;
node1:=Treeview1.Items.AddChild(root,'我的图书馆');
node1.Data:=Pointer(0);
node1.Expanded:=True;
InitGroup(0,node1);
Items.EndUpdate;
end;
end;
end.
4总结query必须在函数内部创建,否则会关闭原来已打开的记集的。我刚开始没这样做直接丢一个ADOQuery控件上去,结果总是只显示第一条记录,不能达到想要的效果,弄了一下午,经过qq群了的人的指教,原来问题就出在这,望大家也少走弯路。