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". Как избавиться от этой ошибки?

Заранее спасибо


Карелин Артем   (2007-04-04 13:53:00) [21]

P.S. Если использовать IBSQL для чтения данных скорость увеличится.


Карелин Артем   (2007-04-04 13:40:00) [22]


> Ильичев С.А. ©   (04.04.07 12:20) [12]

У человека банальная ситуация, когда 2 больших набора данных занимают в памяти слишком большой объем информации. 5 и 7 ответы исчерпывающие в данной ситуации.


Ильичев С.А.   (2007-04-04 12:20:00) [23]

2 Карелин Артем ©   (04.04.07 12:02) [11]

логично предположить что если лика нет там где мы видим
то он там где мы не видим


Карелин Артем   (2007-04-04 12:02:00) [24]


> Ильичев С.А. ©   (04.04.07 11:44) [9]

Лолично предположить, что это создание файла таблицы и текста запроса. А перечисление полей это полсотни строчек вида dm.DBF.Fields[...].Value=dm.q_db.Fields[...].Value


Ильичев С.А.   (2007-04-04 11:49:00) [25]

и таинственное  "перечисление полей"  конечно тоже


Ильичев С.А.   (2007-04-04 11:44:00) [26]

по этому куску не понятно где течёт

что есть
CreateLTable(dbf_name);
CreateTextZapros(i);


Jan1   (2007-04-04 10:12:00) [27]


>      try
>        dm.q_db.Active := true;
>      except
>      end;

сильно


>      if dm.q_db.RecordCount<>0 then

if not dm.q_db.IsEmpty then


>              inc(k);

зачем?


>      dm.q_db.SQL.Clear;

лишнее

А вообще лучше заюзал бы TBatchMove


Виталий Панасенко(дом)   (2007-04-04 09:42:00) [28]

НД, который читает сделай однонаправленным..


greg123   (2007-04-04 09:30:00) [29]

спасибо


Sergey13   (2007-04-04 09:20:00) [30]

> [4] greg123   (04.04.07 09:16)

Так и сделать. Написать Insert-запрос, желательно параметрический (в принципе для дбф-ки это пофиг, но лучше привыкать к хорошему) и выполнять его в цикле, заполнив параметры значениями из исходной БД.


greg123   (2007-04-04 09:16:00) [31]

как это сделать?


Sergey13   (2007-04-04 09:13:00) [32]

> [2] greg123   (04.04.07 09:10)

В таком случае не надо вставлять данные в датасет. Надо напрямую инсертить в таблицу, без открытия датасета.


greg123   (2007-04-04 09:10:00) [33]

CreateLTable(dbf_name);

     dm.DBF.Active:=false;
     dm.DBF.TableName:=dbf_name;
     try
       dm.DBF.Active:=true;
     except
     end;
     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;
     if dm.q_db.RecordCount<>0 then
       begin
         k:=0;
         while not dm.q_db.Eof do
           begin
             dm.DBF.Insert;
             сдесь идет перечисление полей
             dm.DBF.Post;
             inc(k);
             dm.q_db.Next;
           end;
       end;
     dm.DBF.Active:=false;
   end;


Ильичев С.А.   (2007-04-04 09:06:00) [34]

код покажи


Страницы:   1 2

Наверх

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