Можно использовать цикл 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;
|