Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение wofs » 01.09.2012 20:32:48

Доброго дня.
Собственно имеем Lazarus 0.9.30.4 и компонент SQLQuery. База sqlite, подключаемся через стандартные компоненты.
Этот код отказывается добавлять 11 строк в таблицу - добавляет только первую.
Код: Выделить всё
var
  i: integer;
......

T1.Active := True;
    with QRun do
    begin
      Close;
      sql.Clear;

      for i := 0 to 10 do
      begin
        SQL.Add('INSERT INTO TableName (Field1,Field2) VALUES (1,' + IntToStr(i) + ');');
      end;

      ExecSQL;
    end;
    T1.Commit;         

Притом, этот отрабатывает все нормально.

Код: Выделить всё
  i: integer;
......

with QRun do
    begin

      for i := 0 to 10 do
      begin
        T1.Active := True;
        Close;
        sql.Clear;
        SQL.Add('INSERT INTO TableName (Field1,Field2) VALUES (1,' + IntToStr(i) + ');');
        ExecSQL;
        T1.Commit;
      end;

    end;         

Но работает само собой жутко медленно... Ибо дергать коммит каждую строчку...
Собственно вопрос - как выполнить запрос в несколько строк?

p.s приведенные листинги несколько утрированы с целью показать суть.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение Padre_Mortius » 01.09.2012 23:14:45

Код: Выделить всё
var
  i: integer;
......

T1.Active := True;
    with QRun do
    begin
      Close;
      sql.Clear;
      sql.Add('BEGIN TRANSACTION;')

      for i := 0 to 10 do
      begin
        SQL.Add('INSERT INTO TableName (Field1,Field2) VALUES (1,' + IntToStr(i) + ');');
      end;
      sql.Add('COMMIT TRANSACTION;')
      ExecSQL;
    end;
    T1.Commit;         

где-то так
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение wofs » 02.09.2012 01:02:48

Padre_Mortius писал(а):...где-то так...

TSQLQuery вообще на все попытки сделать COMMIT в самом запросе ругается:
Код: Выделить всё
Cannot start a transaction within in transaction.

и это не смотря на
Код: Выделить всё
BEGIN TRANSACTION;
в начале запроса...

Удалось добиться вменяемого управления транзакцией только с использованием TSQLTransaction (в моем примере T1).
А вот с запросом в несколько строк засада...
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение Ism » 02.09.2012 01:13:28

Кто будет компоненты смотреть ?
TSQLScript
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение wofs » 02.09.2012 02:02:56

Ism писал(а):Кто будет компоненты смотреть ?
TSQLScript

Смотрел - он не позволяет загружать тексты запросов из файла и потока...
Согласитесь, несколько странно - TSQLQuery имеет возможность загружать тексты запросов из потока,что подразумевает работу с большими объемами, но не может выполнять более одной строчки...
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение iskander » 02.09.2012 10:43:00

wofs писал(а):Смотрел - он не позволяет загружать тексты запросов из файла и потока...

Код: Выделить всё
SQLScript1.Script.LoadFromFile(ScriptFileName);
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Lazarus 0.9.30.4 + SQLQuery запрос в несколько строк.

Сообщение wofs » 02.09.2012 12:07:45

iskander писал(а):
Код: Выделить всё
SQLScript1.Script.LoadFromFile(ScriptFileName);

Да,да - уже нашел :) Не досмотрел.
Всем спасибо!
Тему можно закрывать :)
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 213

Рейтинг@Mail.ru