powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Несколько Insert подряд без использования цикла
18 сообщений из 18, страница 1 из 1
Несколько Insert подряд без использования цикла
    #38963054
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток, форумчане,
В большинстве СУБД, можно выполнить сразу несколько "insert" подряд без цикла.
Вопрос давношний, но не хотелось бы в цикле вставлять строки в БД и сеть напрягать.
Можно ли в FireBird такое сделать?
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963065
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты имеешь в виду BULK INSERT, или шо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963091
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010не хотелось бы в цикле вставлять строки в БД и сеть напрягать.
А ты используй препарированные запросы с параметрами, она и не напряжётся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963101
Kos-2010,

use execute block
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963128
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Delphi, в цикле формируются значения, которые идут в БД, в качестве новых строк
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963142
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kos-2010!
You wrote on 19 мая 2015 г. 17:51:26:

Kos-2010> В Delphi, в цикле формируются значения, которые идут в БД, в качестве
> новых строки шо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963145
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010В Delphi, в цикле формируются значения, которые идут в БД, в качестве новых
строк
Используй TIBSQL и препарированный запрос с параметрами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963302
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А, это приблизительно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ibqEmpty: TQuery;
...
const
  C_ins_synonym = 'INSERT INTO SYNONYM (ID_EW1, ID_SYNONYM) VALUES (%d, %d)';
var
  L_index_AID: integer;
begin
  for L_index_AID := 0 to high(Pu_ID_words) do
  begin
    ibqEmpty.Close;
        ibqEmpty.SQL.Clear;
        ibqEmpty.SQL.Add(Format(C_ins_synonym, [2, Pu_ID_words[L_index_AID]]));
        ibqEmpty.ExecSQL;
        trDsWord.CommitRetaining;
  end;
end;



только вместо TIBSQL, я использую TQuery - если можно?
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963310
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010это приблизительно так:
Нет, это совершенно не так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963312
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010вместо TIBSQL, я использую TQuery - если можно?
Нельзя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963343
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой вариант выполнить несколько insert подряд, imho, это выполнить несколько insert подряд
в чем суть вопроса-то?
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963344
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkin,

Самый простой - не значит правильный.

Kos-2010,

Читать вот эту статью полностью, раздел «Параметризированные запросы» - особенно внимательно.
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963356
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

Спасибо за подсказку, обязательно изучу.

Только сейчас "добью" "Dimitry Sibiryakov" своим невежеством...

вот что в результате у меня получилось (это на счет " TIBSQL и препарированный запрос с параметрами" ):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
var
  i: integer;
begin
  With IBSQL do
  begin
    SQL.Clear;
    ParamCheck := True;
//  SQL.Text := 'INSERT INTO SYNONYM VALUES(:ID_EW1, :ID_SYNONYM)';
    SQL.Text := 'INSERT INTO SYNONYM VALUES(:ID, :ID_EW1, :ID_SYNONYM)';
  end;


  With IBTransaction1 do
  begin
    for i := 0 to 5 do
    begin
      StartTransaction;
      IBSQL.Close;
      IBSQL.Prepare;
      IBSQL.ParamByname('ID').AsInteger := i+1;
      IBSQL.ParamByname('ID_EW1').AsInteger := 11;
      IBSQL.ParamByname('ID_SYNONYM').AsInteger := 12;
      Try
        IBSQL.ExecQuery;
        Commit;
      Except
        RollBack;
      End;
    end;
  end;



Это все работает. Но с одной неувязочкой: поле "ID" - у меня генерируется на сервере (знаю что это можно избежать с помощью перестройки запроса), но всеже. И без заполнения этого поля приложением у меня - ошибка: "Dynamic SQL Error SQL error code = -804 Count of read-write columns does not equal count of values"
А так все замечательно отрабатыват
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963358
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krapotkin,

Та захотелось узнать, и это обычно на 100% так, что есть более компактный способ, вставить сейчас 50 строк, потом может быть 1000.
И 1000 раз выполнять запрос на вставку (как бы не хотелось) - можно конечно, но нехотелось бы :-)
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963361
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010Только сейчас "добью"
Добил. Вот скажи мне, нахрена ты спрашивал про "напряг сети" в стартовом посте, если
выбираешь самые тормозные и напряжные способы работы? По транзакции на каждую вставляемую
запись? Да Вы, батенька, изверг. И синтаксис SQL тоже учить надо было ещё вчера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963362
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kos-2010,

Изучи как правильно писать insert (полная форма)

в твоем случае

Код: sql
1.
INSERT INTO SYNONYM (ID_EW1, ID_SYNONYM) VALUES(:ID_EW1, :ID_SYNONYM)



1. Зачем делать SQL.Clear если следующая команда SQL.Text := '...' ?
2. Prepare делать только один раз, хотя IBX думаю делает автоматически перед первым ExecQuery
3. Commit нужно делать не после каждого insert, а не чаще одного раза в 1000 вставок
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38963414
Kos-2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
- запрос поправил (я знал, я знал, но забыл :-()
- и "Commit" вынес за "with", и т.д. так что в цикле только значения присваиваю
...
Рейтинг: 0 / 0
Несколько Insert подряд без использования цикла
    #38964330
например такKos-2010,

use execute block
Код: sql
1.
2.
3.
4.
5.
6.
7.
execute block
as
begin
  INSERT INTO SYNONYM (ID_EW1, ID_SYNONYM) VALUES (1, 3);
  INSERT INTO SYNONYM (ID_EW1, ID_SYNONYM) VALUES (2, 2);
  INSERT INTO SYNONYM (ID_EW1, ID_SYNONYM) VALUES (3, 1);
end


не обращайте на меня внимания, продолжайте разговор :)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Несколько Insert подряд без использования цикла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]