TreeView和数据库操作问题.困惑半天了 ( 积分: 100 )

  • 主题发起人 主题发起人 nydelphi
  • 开始时间 开始时间
N

nydelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
读取数据库来创建Treeview
var
Dep: String;
begin
with ADOQuery1 do
begin
Close;
sql.Clear;
sql.Add('select TreeName from Tree');
open;
First;
while not Eof do
begin
DepNode:=TreeView1.Items.Add(Nil,trim(fieldByName('TreeName').AsString));
with ADOQuery2 do
begin
Dep:=Quotedstr(ADOQuery1.fieldByName('TreeName').AsString);
close;
sql.Clear;
sql.Add('select ChildName from Child where TreeName=' + Dep);
open;
First;
while Not Eof do
begin
TreeView1.Items.AddChild(DepNode,trim(FieldByName('ChildName').AsString));
Next;
end;
end;
Next;
end;
end;

建立父节点
var
sqltext:string;
begin
sqlText := 'Insert into Tree(TreeName) values('''+edit1.Text+''')';
DepNode:=form1.TreeView1.Items.Add(nil,EDIT1.Text);
try
with AdoQuery1 do
begin
close;
sql.Clear;
sql.Add(sqltext);
ExecSQL;
end;
except
end;
end;

现在困惑到创建子节点上面,不知道如何创建了.数据库里面父节点一个表,子节点一个表,
做的是一对一的关系
 
读取数据库来创建Treeview
var
Dep: String;
begin
with ADOQuery1 do
begin
Close;
sql.Clear;
sql.Add('select TreeName from Tree');
open;
First;
while not Eof do
begin
DepNode:=TreeView1.Items.Add(Nil,trim(fieldByName('TreeName').AsString));
with ADOQuery2 do
begin
Dep:=Quotedstr(ADOQuery1.fieldByName('TreeName').AsString);
close;
sql.Clear;
sql.Add('select ChildName from Child where TreeName=' + Dep);
open;
First;
while Not Eof do
begin
TreeView1.Items.AddChild(DepNode,trim(FieldByName('ChildName').AsString));
Next;
end;
end;
Next;
end;
end;

建立父节点
var
sqltext:string;
begin
sqlText := 'Insert into Tree(TreeName) values('''+edit1.Text+''')';
DepNode:=form1.TreeView1.Items.Add(nil,EDIT1.Text);
try
with AdoQuery1 do
begin
close;
sql.Clear;
sql.Add(sqltext);
ExecSQL;
end;
except
end;
end;

现在困惑到创建子节点上面,不知道如何创建了.数据库里面父节点一个表,子节点一个表,
做的是一对一的关系
 
会地人.帮帮忙
 
会地人.帮帮忙
 
用循环加表关联(双重循环)
while not eof do //父表
...//取得父节点
while not eof do //子表 --通过与父表关联(选出等于上面选出来的父节点的子节点记录)
...//添加子节点

//大概这个样子了,没看代码,不好意思。
 
啊,一对一的话就一个循环就行了!ft
 
现在我想实现的功能是添加子节点
我的窗体设计时
comobox,edit
comobox用来给出父节点的名称
想通过选择comobox,在edit中填写子节点名称来添加
 
帮忙看看
 
那就更简单了。
先把父节点选出来放到comobox里,选择添加后插入子表即可(注意重复的判断)。
//代码自己写吧。
 
注明:cobobox在另一个窗体上面
to ak_2005能给出代码嘛
 
无论在哪里,你把他保存到一变量或属性就行了,因为你在子表插入记录的时候必须要记录它的父亲节点撒。
//写代码要时间,实在抱歉。
 
可以考虑用dxDBtreeview,省事
 
还有.treeview那个属性能显示出来父节点,要是添加到comobox是添加什么内容
 
dxDBtreeview,没用过.这个不是delphi自带的控件吧
 
我想可以两种方式解决
1.不用Combobox,通过treeview.Selected添加子节点。
2.用Combobox.items.addobject替代Add.
生成的时候想办法弄成
Combobox.items.addobject(node.text,node);
访问时
Combobox.Items.Objects[Combobox.ItemIndex]
 
后退
顶部