首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么实现递归并将结果存入数据库

2012-02-08 
如何实现递归并将结果存入数据库我现在需要计算一系统产品的生产成本:数据库:access 2007数据表:t_test字

如何实现递归并将结果存入数据库
我现在需要计算一系统产品的生产成本:
数据库:access 2007
数据表:t_test
字段说明:
ID:自动编号
FType:产品型号
FNumber:生产中工序编号(不同型号产品生产过程中所需要的工序不同,有些需要4道工序,有的只要3道工序……)
FYield:各工序生产过程中的良率
FCost:各工序生产成本
FTotalCost:累积成本A[n](公式:A[n+1]=A[n]/FYield[n+1]+FCost[n+1]))
FNote:备注,说明FTotalCost的期望结果

问题:怎么实现累积成本这个公式,执行完得到FTotalCost这一列期望结果
数据表格式如下:
看看图片能不能传上来:


如果图片不行:
请看这个表:

Delphi(Pascal) code
//ID    FType    FNumber    FYield    FCost    FTotalCost    FNote//1      A         1          .99      98                     FTotalCost期望结果:98//2      A         2          .98      200                    FTotalCost期望结果:98/0.98+200=300//3      A         3          .97      300                    FTotalCost期望结果:300/0.97+300=609.28//4      A         4          .96      400                    FTotalCost期望结果:609.28/0.96+400=1034.67//5      B         1          .99      100                    FTotalCost期望结果:100//6      B         2          .98      200                    FTotalCost期望结果:100/0.98+200=302.04//7      B         3          .97      300                    FTotalCost期望结果:302.04/0.97+300=611.38//8      C         1          .99      100                    FTotalCost期望结果:100//9      C         2          .98      200                    FTotalCost期望结果:100/0.98+200=302.04


先谢谢各位关注,感激不尽,请帮帮我,如果可以加我QQ教我就更感激了:523028174

[解决办法]
sql2005开始支持递归了:cte
但是不知道access是否支持

可以加载到程序内存,由程序进行递归扫描而生成
[解决办法]
搞一个UDF(用户自定义函数)计算,或建立存储过程计算,要么用Delphi算完,用参数传入。
[解决办法]
Delphi(Pascal) code
哦,仔细看了一下,你这个不必递归可以程序循环执行for i:=1 to 4 do  runsqlbylevel(i);prcedure runsqlbylevel(i);if i=1 then执行:'update t_test set FTotalCost=FCost where FNumber='+inttostr(i)else执行:'update t_test set FTotalCost=FCost+(select FYield*FCost from t_test where id=外部id-) where FNumber='+inttostr(i)--这个 外部id,不知道access怎么传进去,sqlserver的update可以有from
[解决办法]
csdn又抽风了,我晕

比如说 身边没环境,随手写个概念公式
定义一个result:=0;
rtype:=‘’;

for 循环你的adoquery do
begin
if (rtype=ftype)
begin
result:=result/fyield+fcose;
end
else
begin
result:=fcost;
rtype:=ftype
end;
然后这里用id和result更新你的数据
end;

[解决办法]
Delphi(Pascal) code
function CalculateTotalCost(ADOQuery:TADOQuery):bool;var iFType,s:string;    pFTotalCost:double;    ErrCount:integer;    CDSet:TClientDataSet;    DSP:TDataSetProvider;begin  Result:=false;  if not ADOQuery.Active then exit;  CDSet:=TClientDataSet.Create(nil);  DSP:=TDataSetProvider.Create(nil);  try    ADOQuery.First;    DSP.DataSet:=ADOQuery;    CDSet.SetProvider(DSP);    CDSet.Open;    pFTotalCost:=0;    CDSet.First;    while not CDSet.Eof do begin      if iFType<>CDSet.FieldByName('FType').AsString then begin        iFType:=CDSet.FieldByName('FType').AsString;        CDSet.Edit;        CDSet.FieldByName('FTotalCost').AsVariant:=        CDSet.FieldByName('FCost').AsInteger;        CDSet.Post;      end      else begin        s:=Format('%f',[pFTotalCost / CDSet.FieldByName('FYield').AsFloat          + CDSet.FieldByName('FCost').AsInteger]);        CDSet.Edit;        CDSet.FieldByName('FTotalCost').AsFloat:=strtofloat(s);        CDSet.Post;      end;      pFTotalCost:=CDSet.FieldByName('FTotalCost').AsInteger;      CDSet.Next;    end;    if CDSet.ChangeCount>0 then begin       DSP.ApplyUpdates(CDSet.Delta,0,ErrCount);       Result:=true;     end;  finally    CDSet.Free;    DSP.Free;  end;end;procedure TForm1.Button1Click(Sender: TObject);begin  if CalculateTotalCost(ADOQuery1)then showmessage('成本核算完成。')//ADOQuery1是你的查询数据集  else showmessage('成本核算失败。');end; 

热点排行