Пакетное выполнение SQL-запросов
Добавлено: 05 фев 2016, 15:26
Доброго времени суток. Столкнулся с необходимостью многократного выполнения SQL-запроса с параметрами, но не знаю, как это реализовать в Delphi. Есть StringGrid (SGImp), в котором более 5000 строк. Надо из SG по условию делать либо INSERT в табличку, либо UPDATE. Рою инет, но пока ничего не нашел. Реализовал пока что так: AQ - ADOQuery
Работает, но так точно неправильно в смысле качества программирования и скорости работы программы... Подскажите, как построить правильно пакетный запрос, чтобы штук по 100-200 записей сразу одним запросом вставлялись/обновлялись. По форуму ничего не нашлось. Пойду пока рыть инет
Код: Выделить всё
with DMF.AQ do
begin
close;
sql.Clear;
sql.Add('insert INTO users (T_num, FIO, Dol, Ceh, ID_Ceh, TS, ');
sql.Add(' TS_F, Discipline, Good, Hard, Active, Complite, NM, GOD, Closed,');
sql.Add(' Fil_ID)');
sql.Add(' VALUES (:tnum, :fam, :p rof, :cex, :idcex, :ts, :tsf, 2, 2,');
sql.Add(' 2, 2, 8, :nmm, :goo, 0, :idfil)');
for I := 0 to SGImp.RowCount - 1 do
begin
if SGImp.Cells[0,i+1] <> '' then
begin
Parameters.ParamByName('tnum').Value := Trim(SGImp.Cells[0,i+1]);
Parameters.ParamByName('fam') .Value := Trim(SGImp.Cells[1,i+1]);
Parameters.ParamByName('prof').Value := Trim(SGImp.Cells[2,i+1]);
Parameters.ParamByName('cex') .Value := Trim(SGImp.Cells[3,i+1]);
if SGImp.Cells[4,i+1] = '' then
SGImp.Cells[4,i+1] := '0';
Parameters.ParamByName('ts') .Value := StrToFloat(SGImp.Cells[4,i+1]);
if SGImp.Cells[5,i+1] = '' then
SGImp.Cells[5,i+1] := '0';
Parameters.ParamByName('tsf') .Value := StrToFloat(SGImp.Cells[5,i+1]);
Parameters.ParamByName('nmm').Value := mm;
Parameters.ParamByName('goo').Value := yy;
Parameters.ParamByName('idfil').Value := '80';
Parameters.ParamByName('idcex').Value := '0';
ExecSQL;
end;//if SGImp.Cells[0,i+1] <> '' then
end;//for I := 0 to MainF.Source.RecordCount - 1 do
end;//with DMF.AQ do