Показать сообщение отдельно
  #2  
Старый 05.04.2021, 12:00
Vladimr Vladimr вне форума
Прохожий
 
Регистрация: 17.03.2021
Сообщения: 41
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Можно использовать цикл case of, вместо if then.

Вот примерный вариант переделки данного кода
Код:
for i := 1 to maxI do
begin
  if i = 1 then
  dm.zapros.SQL.Text := 'запрос1'
  else if
  if i = 2 then
  dm.zapros.SQL.Text := 'запрос2'
  else if
  if i = 3 then
  dm.zapros.SQL.Text := 'запрос3'; 
  //И так 13 запросов


Вместо этого участка кода попробуй использовать такой вариант в одну строку

Код:
dm.zapros.SQL.Text:= 'запрос'+inttostr(i);

Далее
Код:
          if (i in [1,2,3,4,5,6,7,8,9,10,11,12,13] then
            begin
               Sheet.Cells[r,1].Value := dm.zapros.FieldByName('path').AsString;
               Sheet.Cells[r,2].Value := dm.zapros.FieldByName('kol').AsInteger;
            end;

Тут можно не проверять условием, потому что при любом значении добавляются значения

Можно просто написать
Код:
               Sheet.Cells[r,1].Value := dm.zapros.FieldByName('path').AsString;
               Sheet.Cells[r,2].Value := dm.zapros.FieldByName('kol').AsInteger;

Вот тут же используешь case of, а почему выше не использовал?
Код:
        case i of
          1: WorkBook.SaveAs(Tempkp+'\файл1 от '+dt+'.csv',6);
          2: WorkBook.SaveAs(Tempkp+'\файл2 от '+dt+'.csv',6);
          3: WorkBook.SaveAs(Tempkp+'\файл3 от '+dt+'.csv',6);
          //и так 13 файлов
        end;

Да и здесь можно использовать одну строку, потому что значение не изменяются
Код:
WorkBook.SaveAs(Tempkp+'\файл'+inttostr(i)+' от '+dt+'.csv',6);

А так будет выглядеть все со всеми изменениями
Код:
maxI:=13;
  dm.zapros.SQL.Text:='запрос'+inttostr(i); //вывод в одну строку вместо множества использование if then

  dm.zapros.Open;
  if  not dm.zapros.IsEmpty then
      try
        Exsel:=CreateOleObject('Excel.Application');
        Exsel.DisplayAlerts:=false;
        WorkBook:=Exsel.Workbooks.Add;
        Sheet:=WorkBook.WorkSheets[1];
        r:=1;

        while not dm.zapros.Eof do
        begin

        Sheet.Cells[r,1].Value:=dm.zapros.FieldByName('path').AsString; //выделенно до проверки значения i
        Sheet.Cells[r,2].Value:=dm.zapros.FieldByName('kol').AsInteger; //потому что выводяться при любом запросе

          case i of
            01: begin
                  Sheet.Cells[r,5].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('F').AsString;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            02: begin
                  Sheet.Cells[r,5].Value:= dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            03: begin
                  Sheet.Cells[r,4].Value:=dm.zapros.FieldByName('E').AsInteger;
                end;

            04: begin
                  Sheet.Cells[r,4].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            05: begin
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            06: begin
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            07: begin
                  Sheet.Cells[r,4].Value:=dm.zapros.FieldByName('E').AsInteger;
                end;

            08: begin
                  Sheet.Cells[r,5].Value:=dm.zapros.FieldByName('E').AsInteger;
                end;

            09: begin
                  Sheet.Cells[r,4].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('F').AsString;
                  Sheet.Cells[r,8].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            10: begin
                  Sheet.Cells[r,4].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('F').AsString;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('F').AsString;
                  Sheet.Cells[r,8].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            11: begin
                  Sheet.Cells[r,5].Value:=dm.zapros.FieldByName('E').AsInteger;
                end;

            12: begin
                  Sheet.Cells[r,5].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('F').AsString;
                end;

            13: begin
                  Sheet.Cells[r,5].Value:=dm.zapros.FieldByName('E').AsInteger;
                  Sheet.Cells[r,6].Value:=dm.zapros.FieldByName('F').AsString;
                  Sheet.Cells[r,7].Value:=dm.zapros.FieldByName('G').AsString;
                end;

            end; //относиться в выражению case of
         inc(r);
        end;   //к выражениею while do

      finally
        WorkBook.SaveAs(Tempkp+'\файл'+inttostr(i)+' от '+dt+'.csv',6);
        WorkBook.Close;
        Exsel.Application.Quit;
        Exsel:=Unassigned;
      end;

end;
Ответить с цитированием