Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.048 c
11-1158055111
[e]Bu$ter
2006-09-12 13:58
2007.05.06
Как отловить потерю фокуса у формы


2-1176808029
Клара
2007-04-17 15:07
2007.05.06
Отчет


15-1175977895
vasIZmax
2007-04-08 00:31
2007.05.06
Как правильно писать программу?!


1-1173274283
alexey_mas
2007-03-07 16:31
2007.05.06
MDI интерфейс


15-1175782636
PRed
2007-04-05 18:17
2007.05.06
Посоветуйте у какого производителя взять ноутбук!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский