![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При переливе из gdb-ки в dbf-ку - сообщение "Out of memory" [D7, IB6.x]
greg123 © (2007-04-04 09:04:00)Программа переливает из одной таблицы формата *.gdb в несколько dbf-файлов(в итоге каждый dbf файл должен содержать по 250-300 тыс. записей). Перелив идет по принципу созлается первая дбф-ка - туда заливается информация, создается следующая и т.д. В районе третьей дбф-ки выдается сообщение "Out of memory". Как избавиться от этой ошибки?
Заранее спасибо
Mike Kouzmine (2007-04-06 02:00:00) [1]Делаешь три процедуры, формирующие наборы для 3 файлов и напрямую из них лить в дбф с помощье гетерогенного инсертного запроса.
Карелин Артем (2007-04-05 17:41:00) [2]
> SlymRO © (05.04.07 15:52) [32]
> Это скоко по времени будет на 300 тыс записей?
Меньше намного чем сама запись в DBF.
SlymRO (2007-04-05 15:52:00) [3]Карелин Артем © (04.04.07 12:02) [11]
А перечисление полей это полсотни строчек вида dm.DBF.Fields[...].Value=dm.q_db.Fields[...].Value
чур меня...
Это скоко по времени будет на 300 тыс записей?
greg123 (04.04.07 9:10) [2]
if dm.q_db.RecordCount<>0 then
Попытка зафетчить весь датасет...
убери эту проверку хватит while not dm.q_db.Eof do
ServerCursor + однонаправленность
Jan1 (2007-04-05 15:45:00) [4]
> Карелин Артем © (05.04.07 15:36) [30]
да!
чего-то я не догнал :) сорри.
Карелин Артем (2007-04-05 15:36:00) [5]
> Jan1 (05.04.07 10:30) [29]
Он не потомок датасета, но его иерахия позволяет на порядок быстрее последовательо считывать данные.
Jan1 (2007-04-05 10:30:00) [6]
> Неа
не может IBSQL вернуть данных. Посмотри его иерархию.
Mike Kouzmine (2007-04-05 00:15:00) [7]В бде возможны гетерогенные запросы. (раз уж бде используется)
Карелин Артем (2007-04-04 19:17:00) [8]
> Jan1 (04.04.07 17:32) [26]
Неа
Jan1 (2007-04-04 17:32:00) [9]
> см 2
Ты путаешь IBQuery и IBSQL.
Карелин Артем (2007-04-04 16:52:00) [10]
> Ильичев С.А. © (04.04.07 16:49) [24]
Тут мой телепатор сломался ))
Ильичев С.А. (2007-04-04 16:49:00) [11]2 Карелин Артем
на сколько меньше ?
Карелин Артем (2007-04-04 16:41:00) [12]
> Ильичев С.А. © (04.04.07 16:38) [22]
В первой итерации значит меньше набор данных был ;)
Ильичев С.А. (2007-04-04 16:38:00) [13]2 Карелин Артем
..несколько сотен тысяч строк в обоих наборах данных к концу второй итерации просят..
а к концу первой они разве не просили?
Карелин Артем (2007-04-04 16:34:00) [14]
> Jan1 (04.04.07 16:27) [19]
см 2
Карелин Артем (2007-04-04 16:30:00) [15]
dm.q_db.Active := false; //закрыли набор данных от прошлой итерацииАналогично для пишущего набора. Вот только в конце всех циклов останется открытым читающий набор.
dm.q_db.SQL.Clear;
dm.q_db.SQL.Text := CreateTextZapros(i);//создали запрос на текущую итерацию
try
dm.q_db.Active := true;//открыли набор данных
except
end;
Ошибка возникает потому что несколько сотен тысяч строк в обоих наборах данных к концу второй итерации просят такой обьем памяти, который виндовс уже предоставить не может.
Jan1 (2007-04-04 16:27:00) [16]
> Читает из gdb и пишет в dbf.
каким образом он их читает из gdb?
Ильичев С.А. (2007-04-04 16:22:00) [17]2 Карелин Артем
> в данном случае всегда 2
Вы это логично предположилииз того что вам показали?
мне в таком случае интересна Ваша версия возникновения
указанной ошибки "Out of memory"
Карелин Артем (2007-04-04 16:16:00) [18]
> Ильичев С.А. © (04.04.07 15:37) [15]
Наборов данных в данном случае всегда 2. Один читает, другой пишет.
> Jan1 (04.04.07 15:40) [16]
Читает из gdb и пишет в dbf.
Jan1 (2007-04-04 15:40:00) [19]
> P.S. Если использовать IBSQL для чтения данных скорость
> увеличится.
он не читает данных. он их пишет.
Ильичев С.А. (2007-04-04 15:37:00) [20]2 Карелин Артем
У человека ситуация когда он не закрывает то что открывает
и поэтому эксепшн "..В районе третьей дбф-ки.."
а не в районе первой, когда ноборов данных именно 2