求一个算法(100分)

  • 主题发起人 主题发起人 haisongzhang
  • 开始时间 开始时间
H

haisongzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
表中的数据是一个树形结构的记录
表中的字段有:id(关键字),parent(父关键字),level(级别),others(其它字段).
并规定了最大级别为10。
当选中一条记录时,怎样把此节点下的所有记录取出来(包括字节点,子节点的字节点......)?
谢谢!
 
用递归方法
 
你能告诉我,怎么实现吗?
我就是不会使用这个递归算法!
 
需要在什么地方实现,Delphi中,还是...
 
想不到付分后还可以检分:
我的帖子:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1442444

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
procedure TBook.ListAllSubNode(Code: string;Node:TTreeNode);
var
LevelNum : integer;
CurrentNode : TTreeNode;
CurrentCode : string;
BookName : string;
//BookQuery : TQuery;
SavePlace : TBookMark;
CurrentLevel: Integer;
begin
SavePlace := nil;
if LibDM.Book.Active = False then
LibDM.Book.Active := True;
//ookQuery.Database := LibDM.
LibDM.Book.First();
LevelNum := GetLevelNum(Code, '222');
while not LibDM.Book.eof do
begin
CurrentCode := LibDM.Book['book_ID'];
BookName := LibDM.Book['Book_Name'];
CurrentLevel:= GetLevelNum(CurrentCode, '222');
if (CurrentLevel = LevelNum+1) {如果处于下级} then
if ComparePrefix(Code, CurrentCode) then
if (ComparePrefix(Code, CurrentCode)){LevelNum级前的代码相同} then
begin
SavePlace := LibDM.Book.GetBookmark;
CurrentNode := ArchTree.Items.AddChild(Node, CurrentCode+'->'+ BookName);
if CurrentLevel < 3 then
begin
ListAllSubNode(CurrentCode, CurrentNode);
if SavePlace<>nil then
LibDM.Book.GotoBookmark(SavePlace); //为了这句代码的正确位置,我花了一个晚上加一个早晨,我激动不已,我对前途............. end;
end;//
LibDM.Book.Next();
end;
end;
//我将这段代码贴出来,也是想抛砖引玉,换取更好的代码
//虽然还有些子程序没贴出来,只要大家要,我会公布的
 
procedure TForm1.GetTreeData(Node: TTreeNode);
var
SNode: TTreeNode;
begin
// 这里是你对节点Node的处理代码。
if Node.HasChildren then
begin
SNode := Node.getFirstChild;
while SNode <> nil do begin
GetTreeData(SNode);
SNode := Node.GetNextChild(SNode);
end;
end;
end;
 
我现在要实现的功能就是在DBTreeView中实现复制和粘贴。是在Delphi中。
如果能够使用sql server的存储过程,那就再好不过了!
请各位多给些提示!谢谢!
 
// 取得节点下得所有节点text
function TForm1.zjdTreeView(Sender:TTreeview ):string;

var
node:TTreeNode;
child:TTreeNode;
i,j:integer;
idz,sql:string;
begin //1
node:=Treeview1.Selected ;
i:=node.Level;
idz:=node.text;
child:=node.GetNext;

while child<>nil do
begin //2
j:=child.Level;
if j<=i then break;
idz:=idz +','+ child.text;
child:=child.GetNext;
end; //2
zjdTreeView:=idz;
end;
// 取得节点下得所有节点结束
 
各位能给我解释一下吗?
 
后退
顶部