![]() |
| ||
|
|
Новости |
Поиск |
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". Как избавиться от этой ошибки?
Заранее спасибо
Карелин Артем (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]код покажи