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

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

Как закрывать пройденные записи в OracleDataSet


ali_tash ©   (2005-11-02 19:23:00) 

Проблема такая:
я выбираю данные из таблицы с большим количеством записей
в OracleDataSet и в цикле их все перебираю.
На очень больших таблицах выдаётся сообщение OutofMemory.даже если свойство QueryAllRecords:= False
то память всё равно кончится но позже.
Можно конечно надстроить ещё один цикл и выбирать по 1000
записей, но хотелось бы узнать можно ли освободить те записи которые я уже прошёл, т.е. паралельно с открытием следующей порции записей закрывать предыдущие ?


Fay   (2005-11-03 23:04:00) [1]

2 ali_tash   (03.11.05 21:34) [17]
Вот и славно! А то я уже подумал, что не понял вопрос.


ali_tash   (2005-11-03 21:34:00) [2]

Unidirectional - OK
 Спасибо.


Val   (2005-11-03 14:09:00) [3]

ааааа :) я не знаю про аналогичную штуковину в MS SQL ничего, но, вероятно, должна быть..то есть делаем то же самое, только наоборот :)


ANB   (2005-11-03 13:57:00) [4]


> Val ©   (03.11.05 12:39) [13]

Так мы из оракла в MS SQL данные перегоняли


Fay   (2005-11-03 13:18:00) [5]

2 ali_tash   (02.11.05 19:23)
Какая версия DOA?


Val   (2005-11-03 12:39:00) [6]

я имею ввиду загрузку в оракл лоадером и обработку с помощью pl\sql на сервере, как альтернативу перегонов через клиент и обработку на нем.


ANB   (2005-11-03 12:34:00) [7]


> Val ©   (03.11.05 12:24) [11]

лоадер в ораклу все загружает. Связь MS SQL - Oracle - просто ужасная. Что с одной, что с другой стороны. Просто перетянуть данные еще можно, а сложную обработку при этом фиг сделаешь.


Val   (2005-11-03 12:24:00) [8]

>[6] ANB ©   (03.11.05 09:51)
фиг знает. есть еще sqlloader...


ANB   (2005-11-03 11:32:00) [9]


> Курдль ©   (03.11.05 11:28) [9]

на милионе записей уже упадет. Это особенность TOracleDataSet - уже зафетченные записи он держит в памяти.


Курдль   (2005-11-03 11:28:00) [10]


> ali_tash   (02.11.05 19:23)
> я выбираю данные из таблицы с большим количеством записей
> в OracleDataSet и в цикле их все перебираю.
> На очень больших таблицах выдаётся сообщение OutofMemory.

А нельзя ли уточнить цифру "очень больших".
Помницца, у меня была тестовая прога для оценки быстродействия. Там были многомиллионные датасэты и никто ни разу не ругнулся. Не могла ли закрастся в код ошибка с не освобождаемым ресурсом?


ANB   (2005-11-03 10:19:00) [11]


> Sergey13 ©   (03.11.05 10:03) [7]

Я уже собирался тоже пилить на порции, да опробовал Query и не стал. Кстати, TOracleQuery не является дейтасетом со всеми вытекающими.


Sergey13   (2005-11-03 10:03:00) [12]

2 [6] ANB ©   (03.11.05 09:51)
А тут перекачка? Не разглядел. Да и при перекачке необязательно тянуть сразу все.


ANB   (2005-11-03 09:51:00) [13]


> Sergey13 ©   (03.11.05 09:49) [5]

Тебе нужно перекачать в MS SQL всю таблицу (точнее запрос из нескольких). При этом провести логическую обработку данных. Легче всего это делать клиентом на делфи.


Sergey13   (2005-11-03 09:49:00) [14]

А еще можно попробовать не работать с Ораклом как с Парадоксом.


ANB   (2005-11-03 09:26:00) [15]

Я так понимаю это DOA ? Замени TOracleDataSet на TOracleQuery. И будет тебе счастье.


roottim   (2005-11-03 09:13:00) [16]

Делай на сервере...
declare
...
begin
 cursor c in (select ... from ...)
 loop
 end loop;
end;


а может updateдостатточен


Fay   (2005-11-02 20:22:00) [17]

2 ali_tash   (02.11.05 19:23)
Unidirectional ?


umbra   (2005-11-02 20:01:00) [18]

нет.


Наверх

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