Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

TQuery и память   Найти похожие ветки 

 
Grant   (2007-02-10 23:59) [0]

Всем привет. Помогите с такой проблеммой.
У меня есть компонент TQuery. Добавляю в него запрос.
Делаю Open и First. Сразу скажу что запрос возвращает 500000 строк. Дальше пишу такой цикл
 while not TQuery.Eof do
 begin
   .......
   Next;
 end;

Так вот в чем проблемма. По мере того как увеличивается проход по циклу, у меня увеличивается занимаемая приложением память. В конечном итоге она доходит до предела и приложение виснет. Пробовал выполнять запрос и не делать прохода по циклу и приложение нормально отрабатывало не занимая памяти. Подскажите, пожалуйста, как с этим бороться? Ошибка BDE: Temporary Table Resource Limit.
Где-то читал что надо увеличить какую-то настройку, но неуверен. Помогите!!!!!!!!


 
Johnmen ©   (2007-02-11 00:17) [1]


> Подскажите, пожалуйста, как с этим бороться?

Не возвращать столько записей. Ибо это бред...


 
Sergey Masloff   (2007-02-11 08:16) [2]

Или ответ от Johnmen ©   (11.02.07 00:17) [1] или использовать однонаправленный курсор (не помню уже за давностью лет, но вроде их поддерживает)


 
Johnmen ©   (2007-02-11 13:45) [3]


> Sergey Masloff   (11.02.07 08:16) [2]

Поддерживает.


 
Desdechado ©   (2007-02-11 14:21) [4]

Query.Unidirectional=True
Однако остается открытым вопрос, хачемнужно полмиллиона записей на клиенте?


 
ANB ©   (2007-02-12 14:05) [5]


> хачемнужно полмиллиона записей на клиенте?

ИМХО - товарищ использует SQL движок без хранимой логики. Или не знает, про ее наличие.
А ежли движок хранимки не поддерживает, то можно привести целую кучу примеров, когда нужно обработать и несколько миллионов(а то и миллиардов) записей, причем все их придется тащить на клиента.
Кистате, схожая картина и при конвертации, если пришлось делать ее через клиента. Тут и наличие хранимок не сильно помогает.


 
Johnmen ©   (2007-02-12 14:48) [6]


> ANB ©   (12.02.07 14:05) [5]
> то можно привести целую кучу примеров, когда нужно обработать
> и несколько миллионов(а то и миллиардов) записей, причем
> все их придется тащить на клиента.

Но не все держать на клиенте одномоментно.


 
ANB ©   (2007-02-12 16:13) [7]


> Но не все держать на клиенте одномоментно.

Особенности технологии. Двунаправленные наборы, используемые для отображения (например в гриде) - тащат все на клиента.
А вот избавление от этого тащения для разных библиотек - разные. У DOA, например, пришлось сменить компонент. Для TQuery - уже подсказали способ.


 
Johnmen ©   (2007-02-12 18:06) [8]


> Особенности технологии. Двунаправленные наборы, используемые
> для отображения (например в гриде) - тащат все на клиента.

И что? Теперь иметь сразу все поллимона, чтобы их посмотреть?
И однонаправленные тоже тащат все на клиента, но постепенно, и не держат всё скопом.

>  Для TQuery - уже подсказали способ.

Способ чего? Тащения?
Так я не о нём, а о необходимости, а точнее, её отсутствии, иметь ОДНОМОМЕНТНО на клиенте все записи.


 
Sergey Masloff   (2007-02-13 06:31) [9]

Johnmen ©   (12.02.07 18:06) [8]
Например нужно их напечатать. В Excelе ибо такое требоввание гос. органа. Предоставляются одновременно печатная и электронная формы. Это не с потолка пример :( к нам эпизодически приезжает грузовик за пачкой бумаги в 2 моих роста напечатаных самым мелким шрифтом Excel-я. На UNIX сервере формировать не всегда просто так что некие подобные извраты имеют место быть...


 
evvcom ©   (2007-02-13 09:15) [10]

> [9] Sergey Masloff   (13.02.07 06:31)

Даже если в Excel их тащить, DataSet-у нафиг не нужно их все в кеше хранить. Кроме того, Excel на листе максимум 65536 строк имеет. Никак не поллимона.


 
Johnmen ©   (2007-02-13 10:09) [11]


> Sergey Masloff   (13.02.07 06:31) [9]

Печать процесс последовательный, строка за строкой, лист за листом, а не все строки разом. И для этого вовсе нет необходимости держать ВСЕ записи единовременно.


 
ANB ©   (2007-02-13 12:07) [12]


> Johnmen ©   (13.02.07 10:09) [11]

Чет мы не о том спорим. Я в сабже не нашел, что автору записи нужны все одновременно. Проблема была их вытащить последовательно для обработки. И чтоб обработанные места в памяти не занимали. Вроде бы так.
А тащить пол-лимона для отображения - это изврат.


 
Grant   (2007-02-13 17:45) [13]

Спасибо за ответы. Последний пост ANB правильно трактует мою задачу. Но возникла ещё одна проблема. Я использую Oracle. Данные выбираю из Temporary Table(временной таблицы). К сожалению применение к TQuery свойства UniDirectional = True вызывает исключение. Пишет что датасет не поддерживает такую операцию. Скорее всего потому, что таблица временная.


 
Johnmen ©   (2007-02-13 18:05) [14]


> К сожалению применение к TQuery свойства UniDirectional
> = True вызывает исключение. Пишет что датасет не поддерживает
> такую операцию. Скорее всего потому, что таблица временная.

Это потому, что ты пытаешься, явно или нет, работать с однонаправленным НД навигационными методами так, как будто он двунаправленный.


 
Val ©   (2007-02-13 18:20) [15]

>Подскажите, пожалуйста, как с этим бороться?
>Последний пост ANB правильно трактует мою задачу.
>Я использую Oracle.
Наконец-то соизволили просвятить.
Бороться с этим предоставьте серверу. Напишите хп, используйте цикл по курсору - пусть он работает.


 
Desdechado ©   (2007-02-13 18:24) [16]

> UniDirectional = True вызывает исключение.
По нему можно только Next делать, никаких Prior или First. И, естественно, никаких гридов и т.п. визуальщины.


 
ANB ©   (2007-02-13 18:36) [17]


> Я использую Oracle. Данные выбираю из Temporary Table(временной
> таблицы).

Беру все свои оправдательные к данному случаю слова обратно.

Пиши на PL/SQL - будет быстрее и чище. В противном случае это все равно, что плац ломом подметать.



Страницы: 1 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1175864270
kaif
2007-04-06 16:57
2007.05.06
Прогресс человечества


2-1176530991
kyn66
2007-04-14 10:09
2007.05.06
Различие между двумя типами записей


15-1176007036
Просто Васёк
2007-04-08 08:37
2007.05.06
Христос Воскресе!


15-1175946783
Vudu
2007-04-07 15:53
2007.05.06
Поддержка разных форматов дат


8-1156316216
Dewian
2006-08-23 10:56
2007.05.06
Визуальные образы в Вмнампе