powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 3 и очень большая таблица
3 сообщений из 3, страница 1 из 1
Firebird 3 и очень большая таблица
    #39563525
petvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно в некоторых таблицах БД нужно заполнить одно поле. использую код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  While not IBTable1.Eof do
    begin
      Form1.Update;
      IBTable1.Edit;
      EncStr:=IBTable1.FieldByName('MAIN_NAME').Value;
      IBTable1.FieldByName('DECODE_NAME').Value:=CLib.DecryptStr(EncStr);
      Rec:=Rec+1;
      ProgressBar1.Position:=Rec;
      ProgressBar1.Update;
      IBTable1.Post;
      IBTable1.Next;
    end;



На маленьких таблицах 200000 - 300000 записей, всё отрабатывает нормально.
А вот на больших сия конструкция отваливается с ошибкой Out of memory.

Собственно как забороть?
...
Рейтинг: 0 / 0
Firebird 3 и очень большая таблица
    #39563529
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petvvСобственно в некоторых таблицах БД нужно заполнить одно поле. использую код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  While not IBTable1.Eof do
    begin
      Form1.Update;
      IBTable1.Edit;
      EncStr:=IBTable1.FieldByName('MAIN_NAME').Value;
      IBTable1.FieldByName('DECODE_NAME').Value:=CLib.DecryptStr(EncStr);
      Rec:=Rec+1;
      ProgressBar1.Position:=Rec;
      ProgressBar1.Update;
      IBTable1.Post;
      IBTable1.Next;
    end;



На маленьких таблицах 200000 - 300000 записей, всё отрабатывает нормально.
А вот на больших сия конструкция отваливается с ошибкой Out of memory.

Собственно как забороть?

выкинуть IBTable и использовать IBQuery для получения данных и для update
...
Рейтинг: 0 / 0
Firebird 3 и очень большая таблица
    #39563592
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. выкинуть прогресс бар, если ОЧЕНЬ его хочется апдейтить 1 раз на 1000 или 10000 строк
2. см. выше уже сказано про выкинуть ибтэйбл.
3. вместо
IBTable1.Edit;
IBTable1.Post;
IBTable1.Next;
применить запрос с кляузой update ... set ...
IBQuery.Prepare (перед циклом)
потом в цикле
IBQuery.Params[i].AsЯвныйТипПоля := ...
IBQuery.ExecQuery;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 3 и очень большая таблица
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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