Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При переливе из gdb-ки в dbf-ку - сообщение "Out of memory" [D7, IB6.x]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо