大家看看:请帮我把下面的程序改成递归的函数,谢谢了!(0分)

  • 主题发起人 主题发起人 wwwy119
  • 开始时间 开始时间
W

wwwy119

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
TargetNode:TTreeNode;
CNode:TTreeNode;
FNode:TTReeNode;
begin
with ado do
begin //8
close;
sql.Clear;
sql.Add('select FilialeCode,filialeName from FilialeInfo');
open;
first;
while Not Eof do
begin //7
TargetNode:=tv_Res.Items.Add(nil,ado.fieldByName('FilialeName').AsString);
with query1 do
begin //6
close;
sql.Clear;
sql.Add('select SectionCode,SectionName from SectionInfo where Filialecode='''+ado.fieldbyname('filialeCode').Text+'''');
open;
first;
while Not Eof do
begin //5
CNode:=tv_Res.Items.AddChild(TarGetNode,query1.fieldbyName('SectionName').Text);
with query2 do
begin //4
close;
sql.Clear;
sql.Add('select BuildingCode,BuildingName from buildingInfo where Sectioncode='''+query1.fieldByName('Sectioncode').Text+'''');
open;
first;
while Not Eof do
begin //3
FNode:=Tv_Res.Items.AddChild(CNode,query2.fieldByName('BuildIngName').Text);
with query3 do
begin //2
close;
sql.Clear;
sql.Add('select RoomCode,RoomName from RoomInfo where Buildingcode='''+query2.fieldbyname('BuildingCode').Text+'''');
open;
first;
while Not Eof do
begin //1
Tv_Res.Items.AddChild(FNode,query3.fieldByName('RoomName').Text);
Next;
end; //1
end; //2
Next;
end; //3
next;
end; //4
next;
end; //5
end; //6
next
end; //7
end;
 
这样的问题不会有人回答的,可以帮你解决问题,不能帮你学习.
 
这个我明白,但是自己现在的水平有限,所以求救,希望各位大哥大姐多多帮助,谢谢了!
 
你可以先把这么长的代码分解成几个函数,并先把业务逻辑说明一下
 
我的主要是从4个不同的表里取出字段,插入到树里面,一个层是一个表。如:
表1
A1
A2
表2
B1
B2
A1
表3
C1
C2
A1
B1
表4
D1
D2
A1
B1
C1
类似这样的结构,需要把他们建成树的形式。我上边的已经实现,但是不是递归,因为以后可能还有增加表。所以请大家帮忙!
 
"需要把他们建成树的形式"表之间怎样关联?建成什么样的树?以后可能增加的是什么样的表?
 
//建树 ID 父ID
procedure CreatorTree(NId:integer;PNode:TTreeNode);
var
QryTmp:TADOQuery;
myNode:TTreeNode;
P:PTVData;
begin
QryTmp:=TADOQuery.Create(nil);
QryTmp.ConnectionString:=conndbstr;
QryTmp.SQL.Add('SELECT * FROM mainnote WHERE p_id='+inttostr(NId)+' ORDER BY n_sn');
QryTmp.Open;

while not QryTmp.Eof do begin
myNode:=mainForm.MenuTree.Items.AddChildObject(PNode,trim(QryTmp.FieldValues['tvbt']),p);
CreatorTree(QryTmp.FieldValues['noteid'],myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
 
建立的是多层的树,表的增加的规则和上边的类似!希望大家再给几个例子!
 
"表的增加的规则和上边的类似",上面的规则你根本没有描述清楚,你给的几个表之间是什么关系,你的树到底是什么样子,你的代码里写的表名是FilialeInfo可是你给出的结构里却是表1,表2之类,这样让人如何理解你的代码?请将问题描述得清楚明了,这样别人才能提供正确的帮助。
 
恩!这个是我做的有问题,谢谢,上面的大哥的意见!我还有一个问题大家帮助解决一下!如果帮助我解决了!我准备把答案放到盒子等delphi高手和和我一样需要的人经常访问的站点上,方便需要的人下载,研究,使用!请高手帮忙了!
问题是:
我准备实现在两棵树之间的拖动(一个假设为原树,另一个为目标树)。拖动的原则是
当我把原来的树里的结点拖到目标树里的时候,如果这个结点是不是叶子结点,那么要把父结点和子结点也拖过去,如果都拖过去了,要与原树的结构一样!也就是可以任意的拖动!
另外当我把原树里的结点拖到目标树里的时候要把拖动的结点同时添加到dbgrid里面,当拖动结束后可以保存到数据库里!
注:这个是一个至少4层的树,原树里的结点需要从数据库动态的添加。
数据库是Mssql。表的结构如下:
a:
aCode
aName
b:
bCode
bName
aCode
c:
CCode
CName
bcode
aCode
d:
dCode
dName
acode
bcode
cCode
如果再有表也是按这个规则进行创建。
 
接受答案了.
 

Similar threads

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