DBGrid控件里有多行成品品号和投产数量,成品品号对应的BOM已经建立,请问如何循环DBGrid1每行成品品号,带出对应的BOM清单和用量?以下是我的代码,但是材料用量总是对应不上,各位大佬请指出问题所在,谢谢!procedure TBOMTH.BitBtn2Click(Sender: TObject);
var
b,c,i,k:integer ;
d,e,f,g:string ;
kb,ka:string;
a:real;
begin
ka:=formatdatetime('yyyymmdd',date); //凭证号
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max(TC001) as kaw from BOMTC where TC001 like'''+ka+'%''');
open;
if length(FieldByName('kaw').AsString)=0 then
begin
ka:=ka+'001';
end
else
begin
kb:=inttostr(strtoint(copy(FieldByName('kaw').AsString,9,3))+1);
while length(kb)<3 do
kb:='0'+kb;
ka:=ka+kb;
end;
if dbgrid1.DataSource.DataSet.FieldByName('凭证号').AsString='' then
application.MessageBox('没有生产计划可生成!','提示',0+64)
else
begin ADOQuery1.First;
while not ADOQuery1.Eof do // begin
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select TA001,TA006,TA007,TA008,TA009,TA011 from BOMTA WHERE TA001='''+DBGrid1.Fields[1].Value+'''');
open;
//end;
if ADOQuery1.RecordCount>0 then d:=DBGrid1.Fields[0].Value ; //原凭证号
e:=DBGrid1.Fields[8].Value ; //物料需求日期
//a:=strtofloat(ADOQuery2.FieldByName('TA011').AsString)*DBGrid1.Fields[5].Value;
ADOQuery1.Next;
//end; // begin ADOQuery2.First;
while not ADOQuery2.Eof do with ADOQuery3 do
begin
close;
sql.clear;
sql.add('insert into BOMTC(TC001,TC002,TC003,TC004,TC005,TC006,TC007,TC008,TC009) VALUES(:a1,:a2,:a3,:a4,:a5,:a6,:a7,:a8,:a9)'); Parameters.ParamByName('a1').Value:=ka; // 凭证号
Parameters.ParamByName('a2').Value:=d ; //原凭证号 //ADOQuery4.FieldByName('TB001').AsString;
Parameters.ParamByName('a3').Value:=ADOQuery2.FieldByName('TA006').AsString; //材料品号
Parameters.ParamByName('a4').Value:=ADOQuery2.FieldByName('TA007').AsString; //材料品名
Parameters.ParamByName('a5').Value:=ADOQuery2.FieldByName('TA008').AsString; //材料规格
Parameters.ParamByName('a6').Value:=ADOQuery2.FieldByName('TA009').AsString; //单位
Parameters.ParamByName('a7').Value:=strtofloat(ADOQuery2.FieldByName('TA011').AsString)*DBGrid1.Fields[5].Value; //材料用量 //strtoint(ADOQuery4.FieldByName('TB006').AsString);
Parameters.ParamByName('a8').Value:=e; //物料需求日期 //ADOQuery4.FieldByName('TB009').AsString;
Parameters.ParamByName('a9').Value:=1; execsql; ADOQuery2.Next; // Next;
end;
end;
var
b,c,i,k:integer ;
d,e,f,g:string ;
kb,ka:string;
a:real;
begin
ka:=formatdatetime('yyyymmdd',date); //凭证号
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max(TC001) as kaw from BOMTC where TC001 like'''+ka+'%''');
open;
if length(FieldByName('kaw').AsString)=0 then
begin
ka:=ka+'001';
end
else
begin
kb:=inttostr(strtoint(copy(FieldByName('kaw').AsString,9,3))+1);
while length(kb)<3 do
kb:='0'+kb;
ka:=ka+kb;
end;
if dbgrid1.DataSource.DataSet.FieldByName('凭证号').AsString='' then
application.MessageBox('没有生产计划可生成!','提示',0+64)
else
begin ADOQuery1.First;
while not ADOQuery1.Eof do // begin
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select TA001,TA006,TA007,TA008,TA009,TA011 from BOMTA WHERE TA001='''+DBGrid1.Fields[1].Value+'''');
open;
//end;
if ADOQuery1.RecordCount>0 then d:=DBGrid1.Fields[0].Value ; //原凭证号
e:=DBGrid1.Fields[8].Value ; //物料需求日期
//a:=strtofloat(ADOQuery2.FieldByName('TA011').AsString)*DBGrid1.Fields[5].Value;
ADOQuery1.Next;
//end; // begin ADOQuery2.First;
while not ADOQuery2.Eof do with ADOQuery3 do
begin
close;
sql.clear;
sql.add('insert into BOMTC(TC001,TC002,TC003,TC004,TC005,TC006,TC007,TC008,TC009) VALUES(:a1,:a2,:a3,:a4,:a5,:a6,:a7,:a8,:a9)'); Parameters.ParamByName('a1').Value:=ka; // 凭证号
Parameters.ParamByName('a2').Value:=d ; //原凭证号 //ADOQuery4.FieldByName('TB001').AsString;
Parameters.ParamByName('a3').Value:=ADOQuery2.FieldByName('TA006').AsString; //材料品号
Parameters.ParamByName('a4').Value:=ADOQuery2.FieldByName('TA007').AsString; //材料品名
Parameters.ParamByName('a5').Value:=ADOQuery2.FieldByName('TA008').AsString; //材料规格
Parameters.ParamByName('a6').Value:=ADOQuery2.FieldByName('TA009').AsString; //单位
Parameters.ParamByName('a7').Value:=strtofloat(ADOQuery2.FieldByName('TA011').AsString)*DBGrid1.Fields[5].Value; //材料用量 //strtoint(ADOQuery4.FieldByName('TB006').AsString);
Parameters.ParamByName('a8').Value:=e; //物料需求日期 //ADOQuery4.FieldByName('TB009').AsString;
Parameters.ParamByName('a9').Value:=1; execsql; ADOQuery2.Next; // Next;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货