继续提问 关于ADOQuery的问题!(5分)

  • 主题发起人 主题发起人 muyixin
  • 开始时间 开始时间
M

muyixin

Unregistered / Unconfirmed
GUEST, unregistred user!
两张表 都在access数据库information中
表1
Class Number
A 35
B 30
C 32

表2
name class
jack A
Join A
Lily A
Lucy B
Llei B
.....
我想把上面的内容添加到 treeview中
第一级节点为class 第二级节点为 name
达到这样的效果
A
Jack
Join
Lily
B
Lucy
LIei
......
我用ADOQuery1 ADOQuery2操作两张表 现在虽然实现了 但总觉得有更优的实现方法 大侠们看看
下面时我实现方法

var NewNode:TTreeNode;

with ADOQuery1 do
begin
Close;
SQL.Clear;
S:='Select *from 表1 Order BY Class ASC'; //首先把表1的内容按照class排序
SQL.Add(S);
Prepared:=True;
Open;

First;
while not Eof do //添加class到第一级节点
begin
if TreeView.Items.Count=0 then //如果treeview中没有目录
begin
NewNode:=TreeView.Items.Add
(nil,ADOQuery1.FieldValues['Class']);
end
else begin
NewNode:=TreeView.Items.Add
(NewNode,ADOQuery1.FieldValues['Class']);
end;
ADOQuery2.Close; //为班级添加同学
ADOQuery2.SQL.Clear;
S:='Select *from 表2 where Class='+'"'+ //选择和表1class相同记录
(ADOQuery1.FieldValues['Class'])+'"';
ADOQuery2.SQL.Add(S);
ADOQuery2.Prepared:=True;
ADOQuery2.Open;
ADOQuery2.First;
while (not ADOQuery2.Eof) do
begin
TreeView.Items.AddChild(NewNode,ADOQuery2.FieldValues
['Name']);
ADOQuery2.Next; //添加下一个name
end;
Next; //继续添加下一个class
end;
end;
ADOQuery1.Close;
ADOQuery2.Close;
 
写的代码还可以,还可以优化一下代码,方法上可能没有太多的好办法,用第三方的控件treeview可以实现与数据库直接相连。
 
你可以先把表1的节点创建出来,并且让每一个节点的haschildren := true ,在节点的Expanding事件中加如寻找下一级别的节点并且增加的操作,这样在节点多的情况下会有很大的优势,并且节省时间.
 
同意Defo_XYF,相当于要用的时候再加子结点。在节点的Expanding事件中,先判断该节点是否是第一层,如果是,再判断是否有子结点,如果没有,就读数据库、添加。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
660
import
I
后退
顶部