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

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

Kos-2010> В Delphi, в цикле формируются значения, которые идут в БД, в качестве
> новых строки шо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 17:52
    #38963145
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
Kos-2010В Delphi, в цикле формируются значения, которые идут в БД, в качестве новых
строк
Используй TIBSQL и препарированный запрос с параметрами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 20:38
    #38963302
Kos-2010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
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
19.05.2015, 20:55
    #38963310
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
Kos-2010это приблизительно так:
Нет, это совершенно не так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 20:59
    #38963312
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
Kos-2010вместо TIBSQL, я использую TQuery - если можно?
Нельзя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 22:05
    #38963343
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
самый простой вариант выполнить несколько insert подряд, imho, это выполнить несколько insert подряд
в чем суть вопроса-то?
...
Рейтинг: 0 / 0
19.05.2015, 22:08
    #38963344
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
krapotkin,

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

Kos-2010,

Читать вот эту статью полностью, раздел «Параметризированные запросы» - особенно внимательно.
...
Рейтинг: 0 / 0
19.05.2015, 22:35
    #38963356
Kos-2010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
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
19.05.2015, 22:38
    #38963358
Kos-2010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
krapotkin,

Та захотелось узнать, и это обычно на 100% так, что есть более компактный способ, вставить сейчас 50 строк, потом может быть 1000.
И 1000 раз выполнять запрос на вставку (как бы не хотелось) - можно конечно, но нехотелось бы :-)
...
Рейтинг: 0 / 0
19.05.2015, 22:41
    #38963361
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
Kos-2010Только сейчас "добью"
Добил. Вот скажи мне, нахрена ты спрашивал про "напряг сети" в стартовом посте, если
выбираешь самые тормозные и напряжные способы работы? По транзакции на каждую вставляемую
запись? Да Вы, батенька, изверг. И синтаксис SQL тоже учить надо было ещё вчера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 22:42
    #38963362
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
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
20.05.2015, 00:23
    #38963414
Kos-2010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько Insert подряд без использования цикла
Спасибо
- запрос поправил (я знал, я знал, но забыл :-()
- и "Commit" вынес за "with", и т.д. так что в цикле только значения присваиваю
...
Рейтинг: 0 / 0
20.05.2015, 15:53
    #38964330
Несколько Insert подряд без использования цикла
например так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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Несколько Insert подряд без использования цикла / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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