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;