![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрывать пройденные записи в 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]нет.