Пакетное выполнение SQL-запросов

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
drobotw
Сообщения: 1
Зарегистрирован: 05 фев 2016, 15:20

05 фев 2016, 15:26

Доброго времени суток. Столкнулся с необходимостью многократного выполнения SQL-запроса с параметрами, но не знаю, как это реализовать в Delphi. Есть StringGrid (SGImp), в котором более 5000 строк. Надо из SG по условию делать либо INSERT в табличку, либо UPDATE. Рою инет, но пока ничего не нашел. Реализовал пока что так: AQ - ADOQuery

Код: Выделить всё

  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
Работает, но так точно неправильно в смысле качества программирования и скорости работы программы... Подскажите, как построить правильно пакетный запрос, чтобы штук по 100-200 записей сразу одним запросом вставлялись/обновлялись. По форуму ничего не нашлось. Пойду пока рыть инет
Ответить