|

楼主 |
发表于 2007-10-15 16:02:25
|
显示全部楼层
我已经解决了,是因为在流程结束后我写了个while循环,但在循环前没有写dataset.first,所以报错。
procedure TDZYHPLYCKCK.FlowBroker1AfterFlowOut(Sender: TObject; Command: TFlowOutCommand);
var
strtemp,strbh,stri :string;
i :integer;
begin
//遍历申请信息中的低值易耗品
DataSetBroker1.DataSet.First;
while not DataSetBroker1.DataSet.Eof do
begin
strtemp:=DataSetBroker1.DataSet.FieldByName('SQBH').AsString;
strbh:=DataSetBroker1.DataSet.FieldByName('SBBH').AsString;
//汇总申请中当前设备编号的使用信息数量
DataSetBroker2.DataSet.Filter:='JSJBH = ''' + strbh + ''' and ZBZJ='''+strtemp+'''';
DataSetBroker2.DataSet.Filtered:=true;
i:=0;
DataSetBroker2.DataSet.First;
while not DataSetBroker2.DataSet.Eof do
begin
stri:=DataSetBroker2.DataSet.FieldByName('SBSL').AsString;
if DataSetBroker2.DataSet.FieldByName('SBSL').AsString<>'' then
i:=i+sysutils.StrToInt(stri);
//jsDialogs.ShowMsg(sysutils.IntToStr(i), '系统提示');
DataSetBroker2.DataSet.Next;
end;
//先查出库存表中的当前编号信息,再减去已分出去的数量,
DataSetBroker4.DataSet.Filter:='SPBH = ''' + strbh + '''';
DataSetBroker4.DataSet.Filtered:=true;
DataSetBroker4.DataSet.Edit;
i:=sysutils.StrToInt(DataSetBroker4.DataSet.FieldByName('KC').AsString)-i;
DataSetBroker4.DataSet.FieldByName('KC').AsString:=sysutils.IntToStr(i);
//jsDialogs.ShowMsg(sysutils.IntToStr(i), '系统提示');
DataSetBroker4.DataSet.Post;
//DataSetBroker4.DataSet.ApplyUpdates;
//jsDialogs.ShowMsg('更新成功', '系统提示');
//DataSetBroker4.DataSet.Filter:='';
//DataSetBroker4.DataSet.Filtered:=true;
DataSetBroker2.DataSet.Filter:='';
DataSetBroker2.DataSet.Filtered:=true;
DataSetBroker1.DataSet.Next;
end;
DataSetBroker4.DataSet.ApplyUpdates;
end; |
|