关于数据和树形控件的连接,下面的代码怎么修改才能正确执行???(100分)

  • 主题发起人 主题发起人 无头骑士
  • 开始时间 开始时间

无头骑士

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.CreateTree(var ANode: TTreeNode; var pid: integer);
var
id: integer;
sname: string;
bmk: TBookMark;
begin
with ADOQuery1 do
begin
filter := 'pid=' + IntToStr(pid);
while not ADOQuery1.EOF do
begin
if ADOQuery1.RecNo<>0 then //.FieldByName('名称').AsString <> null then
begin
sname := FieldByName('名称').AsString;
Anode := Treeview1.Items.AddChild(Anode, sname);
id := FieldByName('ID').AsInteger;
bmk := GetBookmark;
CreateTree(ANode, id);
end
else
begin
Anode := Anode.Parent;
filter := 'pid=' + IntToStr(pid);
if ADOQuery1.BookmarkValid(bmk) then
begin
GotoBookmark(bmk);
FreeBookmark(bmk);
end;
end;
Next;
end;
end;
end;
 
我没怎么看懂你的意图,不过我指出你的错误:
ADOQuery1.Filter赋值后要 Filtered := True ;才能对结果集筛选,当然你还在递归调用所以你的 filter := 'pid=' + IntToStr(pid);应改为:
Filtered := False ; Filter := ...; Filtered := True

 
楼主的当然有问题,递归是用到了,可数据表的传递呢?
你还是去参考以下帖子吧!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2118340
 
我想你这里的问题不只是一处吧。
 
刚开始的时候是以nil 0 为参数进行调用的。
这个也是我从以前的贴子中找到的,说是效果最好的一个。我看他的思想不错,但是还是有问题,不能进行下去,好象是死循环。
没有人能改吗?
 
while not ADOQuery1.EOF do
前面加句ADOQuery1.First;试试看
 
一个treeview,一个adoquery1,一个datasource,adoquery1 设置为系统自带的数据库pubs就可以了
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
MyTreeNode1, MyTreeNode2: TTreeNode;
begin
ADOQuery1.Active :=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Append('select * from sales');
ADOQuery1.Active :=true;
MyTreeNode1 := treeview1.Items.add(nil, 'RootTreeNode1'); { Add a root node }
for i:=0 to datasource1.DataSet.FieldCount -1 do
treeview1.Items.AddChild(MyTreeNode1,datasource1.DataSet.Fields.FieldName);
end;
end.
 
多人接受答案了。
 
后退
顶部