BERDAFLEX Software Systems
Главная > Delphi > Выполнение пакета SQL команд с использованием TADOConnection

Выполнение пакета SQL команд с использованием TADOConnection

История переиздания
Издание 1.0 Январь 2004 г. Сергей Бердачук

Для выполнения SQL команд чаще всего используется компонента TADOCommand, расположенная в палитре компонент ADO. Но для выполнения простых SQL команд, не содержащих bind параметров, более предпочтительным способом является использование метода Execute компоненты TADOConnection. При этом нет дополнительных посредников, и соответственно требуется меньше ресурсов. К сожалению, при вызове метода Execute, выполняется только одна SQL команда. Это не очень удобно при выполнении SQL скриптов. Для решения этой задачи попробуем написать собственную функцию. SQL команды будем разделять друг от друга при помощи определенного символа-разделителя, например “;”. Ниже приведен пример реализации данной функции:

function TDM.executeSqlCommand(const aCommandText:String):boolean;
var
  sqlCommandText:String;
  tmpStr:String;
  delemiterChar:Char;
  delemiterPos:integer;

begin
  result:=true;
  try
    delemiterChar:=';';
    Self.fNeedTerminate:=False;
    tmpStr:=aCommandText;
    delemiterPos:=pos(delemiterChar,tmpStr);
    while Not(Self.fNeedTerminate) and (delemiterPos > 0) do
      begin
        sqlCommandText:=Copy(tmpStr,1,delemiterPos-1);
        tmpStr:=Copy(tmpStr,delemiterPos+1,Length(tmpStr));
        if (Trim(sqlCommandText)<>'') and dbConnection.Connected then
          dbConnection.Execute(sqlCommandText,cmdText,[]);
        Application.ProcessMessages;
        delemiterPos:=pos(delemiterChar,tmpStr);
      end;
    if (Trim(tmpStr)<>'') and dbConnection.Connected then
        dbConnection.Execute(tmpStr,cmdText,[]);        
  except
    if dbConnection.InTransaction then
      dbConnection.RollbackTrans;
    result:=false;
  end;
end;

Данная функция не претендует на полное решение поставленной задачи, так как нет синтаксического разбора текста SQL команды. И соответственно функция не будет корректно обрабатывать строковые данные, содержащие символ-разделитель, а так же закомментированный текст SQL команды. Но, тем не менее, данная функция существенно упрощает работу.

Rambler's Top100 Рейтинг@Mail.ru