请问: 不用堆栈的技术能否快速计算BOM中任一节点值(由下级子节点值) (200分)

  • 主题发起人 Begin_End
  • 开始时间
B

Begin_End

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:
不用堆栈的技术能否快速计算BOM中任一节点值(由下级子节点值)

A =====>A是11*2+8*3=46
(2) (3)
B C ====> B的结果是11,C是8
(4) (1) (2) ( B=4*2+1*3 C=2*4)
D E F
(2) (3) (4)

以下是本人的递归遍历树(BOM),计算某节点的值(仅对子节点的计算)

function TForm1.calcufather(var fathernode:string):integer;
var
sonstr:string;
Tmpda:TADOQuery;
tmpresult:integer;
begin
Tmpda:=TADOQuery.Create(self);
try
with tmpda do
begin
connection:=ADOConnection1;
close;
sql.Clear;
sql.text:='select * from TestBom where fatherid=:fthiid';
parameters.ParamByName('fthiid').value:=fathernode;
open;
first;
tmpresult:=0;
while not eof do
begin
tmpresult:=tmpresult+fieldbyname('dh').asinteger*fieldbyname('dj').asinteger;
sonstr:=fieldbyname('sonid').asstring;
result:=calcufather(sonstr);
next;
end;
result:=tmpresult;
if fieldbyname('Fatherid').asstring='0100080157' then
ShowMessage(IntTostr(tmpresult));
end;
finally;
tmpda.Free;
end;
end;
 
顶部