Работа с бд, вывод данных из запроса

fezelly

Здравствуйте!Проблема: первый запрос выводит данные на основе этих данных второй запрос выводит данные из другой таблицы. В первом запросе выводится несколько записей, но программа прорабатывает только на первую запить...почему не хочет обрабатывать другие не могу понять(
ArrayList:=VarArrayCreate([1,2,0,11],varVariant);
   kolstrok:=6;//идет по строчкам
 
         T:=' select  r.fam, r.name, r.otch,r.drod, r.p_no,                                '+
         ' r.kodlpu, r.nomre, r.datre, r.mkb, r.sto, r.datr                                '+
         ' from rees_poly r                                                                '+
         ' left join  defects_poly d on d.refcod_r=r.uniquecod                             '+
         ' left join  schet_poly s on s.uniquecod=r.refcod                                 '+
         ' where d.code=126 order by r.fam                                                 ';
 
       sql_open(T);
 
   with mainform.listing do begin
       while not eof do begin
            ArrayList[1,0]:= 'П';
            for k:=1 to 11 do begin
              ArrayList[1,k]:=Fields[k-1].Asstring;
            end; //for k
 
       pfam:= trim(Fields[0].Asstring);
       pname:= trim(Fields[1].Asstring);
       potch:= trim(Fields[2].Asstring);
       pdatr:= Fields[10].AsDate;
 
       T:=' select rtr.fam, rtr.name,rtr.otch, rtr.drod, rtr.p_no, '+
          ' rtr.nomlpu,rtr.nomre, rtr.datre, rtr.mkb, rtr.sto, rtr.datin,rtr.datout '+
          ' from reestr rtr left join uch_rees u on  rtr.refcod=u.uniquecod '+
          ' where rtr.fam= '''+pfam+''' and rtr.name= '''+pname+''' and rtr.otch= '''+potch+''''+
          ' and rtr.datin< '''+datetostr(pdatr)+''' and rtr.datout> '''+datetostr(pdatr)+'''';
 
       sql_open(T);
 
         ArrayList[2,0]:='C';
         for j:=4 to 9 do begin
          try
            ArrayList[2,j+1]:=Fields[j].AsInteger;
          except
            ArrayList[2,j+1]:=Fields[j].Asstring;
          end;
         end; //for j
        ArrayList[2,11]:=Fields[10].Asstring+'-'+Fields[11].Asstring;
 
         ExcelApplication1.Visible:=True;
         MWS.WorkSheets[1].Range['a'+inttostr(kolstrok),'l'+inttostr(kolstrok+1)].Value:=ArrayList;
          kolstrok:=kolstrok+2;
         Next;
      end; //while not eof do
    end;//with
,где
procedure SQL_Open(Const T:String);
begin
  With mainForm.Listing Do Begin
          If Open Then Close;
  if  mainForm.IB_Transaction1.Active
       then mainForm.IB_Transaction1.Commit;
  mainForm.IB_Transaction1.StartTransaction;
          SQL.Clear;
          SQL.Add(T);
            ExecQuery;
  End;
end;
2 ответа

fezelly

fezelly, попробуй выполнить не ExecQuery в SQL_Open, а просто Open. Это раз. Во-вторых, ты же не обработав до конца первый select еще раз дергаеш mainForm.Listing (см. строку 31). Для этого запроса надо использовать другой TIBQuery.


fezelly

решила подругому вообще написать и не маяться )
ArrayList:=VarArrayCreate([1,1000,0,11],varVariant);
   kolstrok:=0;//идет по строчкам
 
         T:=' select  r.fam, r.name, r.otch,r.drod, r.p_no,                                '+
         ' r.kodlpu, r.nomre, r.datre, r.mkb, r.sto, r.datr                                '+
         ' from rees_poly r                                                                '+
         ' left join  defects_poly d on d.refcod_r=r.uniquecod                             '+
         ' left join  schet_poly s on s.uniquecod=r.refcod                                 '+
         ' where d.code=126 order by r.fam                                                 ';
 
       sql_open(T);
 
   with mainform.listing do begin
       while not eof do begin
           ArrayList[(2*kolstrok+1),0]:= 'П';
            for k:=1 to 11 do begin
              ArrayList[(2*kolstrok+1),k]:=Fields[k-1].Asstring;
            end; //for k
           kolstrok:=kolstrok+1;
       next;
       end; //while not eof do
   for j:=1 to kolstrok do begin
     pfam:= trim(ArrayList[(2*(j-1)+1),1]);
     pname:= trim(ArrayList[(2*(j-1)+1),2]);
     potch:= trim(ArrayList[(2*(j-1)+1),3]);
     pdatr:= ArrayList[(2*(j-1)+1),11];
 
     T:=' select rtr.fam, rtr.name,rtr.otch, rtr.drod, rtr.p_no, '+
          ' rtr.nomlpu,rtr.nomre, rtr.datre, rtr.mkb, rtr.sto, rtr.datin,rtr.datout '+
          ' from reestr rtr left join uch_rees u on  rtr.refcod=u.uniquecod '+
          ' where rtr.fam= '''+pfam+''' and rtr.name= '''+pname+''' and rtr.otch= '''+potch+''''+
          ' and rtr.datin< '''+pdatr+''' and rtr.datout> '''+pdatr+'''';
     
      sql_open(T);
 
      ArrayList[(2*j),0]:='C';
 
      for i:=4 to 9 do begin
          try
            ArrayList[2*j,i+1]:=Fields[i].AsInteger;
          except
            ArrayList[2*j,i+1]:=Fields[i].Asstring;
          end;
         end; //for j
        ArrayList[2*j,11]:=Fields[10].Asstring+'-'+Fields[11].Asstring;
 
 
   end;
         ExcelApplication1.Visible:=True;
         MWS.WorkSheets[1].Range['a6','l'+inttostr(kolstrok*2+10)].Value:=ArrayList;
   end;//with
единственное проблема может возникнуть переполнения массива ArrayList:=VarArrayCreate([1,1000,0,11],varVariant);