powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема при вставке большого количества записей из FB
25 сообщений из 67, страница 1 из 3
Проблема при вставке большого количества записей из FB
    #40045496
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется БД с овер 15 000 записями в одной таблице (id_студента, фото студента). БД - FireBird.

Нужно таблицу с фото перекопировать в локальную БД (Оракл). Выполняю средствами DELPHI

И вроде как все получается. Но...

при попытках вставки сразу всех записей последовательно я получаю сообщение " Out of memory". Собственно оно и понятно, почему.

1. Как можно вставить все записи? Или поделить количество, допустим на 3, и и вставлять в цикле?
2. Как сделать проверку на дубли? Сейчас поле id_студента, - первичный ключ, но при копировании вставилось несколько сот пустых стотрок, так как видимо, сначала вствляется пустая строка, потом значение.
Если значение уже есть, то возникает исключение "unigue constant", вставка не происходит, но пустая строка остается.
3. Если делить на 3 цикла, то программа после вставки 10 000 завысает. Вероятно, происходят утечки памяти. КАк это проверить избежать?

Вот код вставки
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   
FDQuery1.first;
while not (FDQuery1.Eof) do
begin
try

    qGET_PERS_FOTO.Open;
    qGET_PERS_FOTO.Insert;
    qGET_PERS_FOTO.FindField('foto').Assign(FDQuery1.FieldByName('foto'));
    qGET_PERS_FOTO.FindField('pers_id').Assign(FDQuery1.FieldByName('pers_id'));
    qGET_PERS_FOTO.Post;
    FDQuery1.Next;

    Except
     On e: Exception Do
     begin
       if Pos('unique constraint', e.Message)> 0 then
       begin
         FDQuery1.Next;
      end;
     end;
end;
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045498
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.02.2021 15:39, WНаталья пишет:
> при попытках вставки сразу всех записей последовательно я получаю сообщение " Out of memory".
> Собственно оно и понятно, почему.

почему?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045506
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья
Как можно вставить все записи
Заменить TFDQuery на TFDCommand
WНаталья
так как видимо, сначала вствляется пустая строка,
Нет
WНаталья
то возникает исключение "unigue constant"
Если такое ограничение есть на базе и если текст ошибки звучит именно так
WНаталья
то программа после вставки 10 000 завысает
Само собой. Вы же так и написали
WНаталья
Код: 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.
// Пока не достигли конца датасета, крутим цикл
while not (FDQuery1.Eof) do 
begin
  try
    // Зачем-то в цикле каждый раз пытаемся открыть датасет
    qGET_PERS_FOTO.Open;  
    qGET_PERS_FOTO.Insert;
    // на каждую итерацию цикла делаем поиск полей
    qGET_PERS_FOTO.FindField('foto').Assign(FDQuery1.FieldByName('foto'));
    qGET_PERS_FOTO.FindField('pers_id').Assign(FDQuery1.FieldByName('pers_id'));
    qGET_PERS_FOTO.Post;
    FDQuery1.Next;
  Except
     On e: Exception Do
     begin
       // Если текст сообщения содержит 'unique constraint' (именно в таком написании)
       if Pos('unique constraint', e.Message)> 0 then
       begin
         // то перейти на следующую запись
         FDQuery1.Next;
      end;
      // А если не содержит, то остаться на текущей и повторить вставку
     end;
end;



И покажите DDL таблиц
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045511
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WНаталья
при попытках вставки сразу всех записей последовательно я получаю сообщение " Out of memory". Собственно оно и понятно, почему.

Не используй датасет, вот и всё.
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045524
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
прошу прощения, новичок в этом всем. Пытаюсь разобраться.
Что такое dll таблицы?
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045529
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
не очень понимаю, как использовать TFDCommand.

Допустим, написала я внутри компонента запрос на выборку всех записей.
А дальше как использовать его при вставке ?
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045541
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья> Нужно таблицу с фото перекопировать в локальную БД (Оракл).

А что такое локальная БД?

> Или поделить количество, допустим на 3, и и вставлять в цикле?

Не надо делить на 3. Вставляйте по 1 записи,
потом сделаете коммит для всей пачки.
Для Вашего уровня знаний и разовой задачи этого хватит.

> 2. ... при копировании вставилось несколько сот пустых стотрок,

Удалите их.

> так как видимо, сначала вствляется пустая строка, потом значение.

Нет, Оракл такой фигнёй не страдает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045543
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья
И вроде как все получается. Но...

1. Нужно перейти на query.
2. Вставку делать во временную таблицу, на которой нет никаких триггеров, ограничений и индексов.
3. После заполнения п.2 - вызвать процедуру на сервере (придется её написать), которая сделает остальную работу (проверит и перекинет в нормальную таблицу).
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045544
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья,
грузишь всю таблицу в память, а надо использовать unidirectional
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045550
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели Firebird не линкуется к Oracle?
Если линкуется, то дельфи нафиг не нужен.
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045559
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через ODBC/JDBC линкуется, конечно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045567
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЧерез ODBC/JDBC линкуется, конечно.

Но не работает с блобами. Посмотрите уже топики аффтарши.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045582
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

да, не линкуется.

Оракрл воспринимает блоб как лонг раф и режет его до 32к. (если коротко)
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045583
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья,
тебе не знакомо свойство unidirectional ?
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045586
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
WНаталья
Dimitry Sibiryakov,

да, не линкуется.

Оракрл воспринимает блоб как лонг раф и режет его до 32к. (если коротко)

так это не оракел виноват, а дрова ODBC
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045587
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,

к сожалению нет, не знакомо
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045589
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorтак это не оракел виноват, а дрова ODBC

Правда? Какой тип данных должен вернуть драйвер чтобы Oracle HS воспринял его как BLOB?
SQL_LONGVARBINARY не канает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045592
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья
MaratIsk,

к сожалению нет, не знакомо


к предыдущему сообщению приаттачил файл

unidirectional - это свойство query создающее однонаправленный набор
указываешь UniDirectional := TRUE; и бежишь по набору, формируя insert для целевой бд
out of memory не будет, потому что такой запрос не буферизует все записи в памяти, а только текущую запись
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045594
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dimitry Sibiryakov
defecatorтак это не оракел виноват, а дрова ODBC

Правда? Какой тип данных должен вернуть драйвер чтобы Oracle HS воспринял его как BLOB?
SQL_LONGVARBINARY не канает.
а чойта не канает ?
SQL_BINARY тоже побоку ?
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045611
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,

не вижу у компонента такого свойства.

Для ADO есть, а для FireDac - нет
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045613
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья
MaratIsk,

не вижу у компонента такого свойства.

Для ADO есть, а для FireDac - нет


выбрось FireDac - для столь простой задачи как перекачка данных достаточно
IBDatabase, IBCustomDataSet, IBQuery
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045616
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,
IBDatabase в моем случае не вариант. при коннекте к БД получаю ошибку типа "структура БД не поддерживается".
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045617
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья,
вариант-вариант :)
какая версия у сервера ФБ ?
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045618
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,


3.0
...
Рейтинг: 0 / 0
Проблема при вставке большого количества записей из FB
    #40045620
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья,
значит надо подключить fbclient.dll 3-ей версии только и всего
т.е. положить рядом с приложением
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема при вставке большого количества записей из FB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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