Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема при вставке большого количества записей из FB / 25 сообщений из 67, страница 1 из 3
15.02.2021, 15:39
    #40045496
WНаталья
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при вставке большого количества записей из FB
Имеется БД с овер 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
15.02.2021, 15:42
    #40045498
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при вставке большого количества записей из FB
15.02.2021 15:39, WНаталья пишет:
> при попытках вставки сразу всех записей последовательно я получаю сообщение " Out of memory".
> Собственно оно и понятно, почему.

почему?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.02.2021, 15:59
    #40045506
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при вставке большого количества записей из FB
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
15.02.2021, 16:11
    #40045511
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема при вставке большого количества записей из FB
WНаталья
при попытках вставки сразу всех записей последовательно я получаю сообщение " Out of memory". Собственно оно и понятно, почему.

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

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

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

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

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

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

Удалите их.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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


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


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