循环枚举问题,2天没搞点

yanfeishen79 2008-09-17 10:35:45
我知道一个字段的内容A。。。通过这个字段A的内容去寻找一个目录树的sql-server的一张表。在表里面寻找A的子项,
我现在想枚举A子项里面的记录,有子节点的循环到里面,找出最后一级的内容添加到另外一张表。没有子节点的直接加入另外一张表。

procedure TchukuBaseFrame.add(id:string;mount:real);
var idstr:string;
begin
opensql(ado,'select id,artno,mount,sortname,parentid from sort where parentid='+quotedstr(id)+' and sortname is not null');
if not ado.IsEmpty then
begin
ado.First;
while not ado.Eof do
begin
idstr:=ado.fieldbyname('id').AsString;
opensql(ado1,'select id,artno,mount,parentid from sort where parentid='+quotedstr(idstr)+' and sortname is not null');
if ado1.IsEmpty then
begin
udb.SaveData('chukumx','id,Pitem,mount,memo',' '+quotedstr(master.fieldbyname('id').AsString)+','+quotedstr(ado.fieldbyname('artno').AsString)+','+quotedstr(floattostr(ado.fieldbyname('mount').AsFloat*mount))+','+quotedstr(lltemp.fieldbyname('yt').AsString));
end
else begin
id:=ado.fieldbyname('id').AsString;
mount:=mount*ado1.fieldbyname('mount').AsFloat;
add(id,mount);
end;
ado.Next;
end;
end;
end;

我知道我这样写,有问题,请大侠帮帮我!怎么写,不够分在加。。!
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JeffChung 2008-09-17
  • 打赏
  • 举报
回复
代码手写,请自行测试修改


function TForm1.findLeaf(parentid:integer):integer;
begin
with ADOQuery1 do begin
open;
if Locate( 'parentid',parentid,[]) then begin {找}
findLeaf(FieldByName('id').AsInteger); {用找到记录的id当父id继续找它的孩子}
end
else
result := ADOquery1.RecNo; {起到没有再找到时,返回该行的记录号}
end;
end;
喝口水 2008-09-17
  • 打赏
  • 举报
回复
对的,用递归
nongen 2008-09-17
  • 打赏
  • 举报
回复
用函数递归。
yanfeishen79 2008-09-17
  • 打赏
  • 举报
回复
这种操作好像用数据集没办法实现。。
手指风 2008-09-17
  • 打赏
  • 举报
回复
自己调试调试应该很快能出来的,这种问题要学会自己解决,帮你顶.
hello009527 2008-09-17
  • 打赏
  • 举报
回复
你的ADO数据集是全局的吧,改成局部的。
nbzip 2008-09-17
  • 打赏
  • 举报
回复
看你的题目,应该用递归的.
对节点是是否是子节点用(HasChildren==TRUE)函数来判断.

你要写来二个函数,先建立主体树,然后,叶子就然另一个函数去递归.

全部完成树结构,然后全树再进行一边循环,把没有子节点的放B表,有子结点的放A表。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧