Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2014, 23:48   #1
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию Out of memory DBGridEh

Пытаюсь в DBGridEh открыть большой массив данных. Около 600к записей.
Необходимо после открытия переходить на последнюю запись.
Смотрю выделение памяти программе - при 400 мегабайтах вылетает ошибка Out of memory. Хотя на компьютере ещё очень много остается свободной памяти. Всего 32 Гб, и файл подкачки 32Гб.
Если поставить около 150к записей выводить то всё ок, даже быстро работает. СУБД firebird embedded.
Возможно конечно что запрос очень сложный, с конкатенацией строк. Но это необходимо.
Код:
SELECT id,COALESCE(linkp,'')||iif(vidp <> '',COALESCE(vidp,'
'||vidp||'
'),'')||COALESCE(namep,'') as VIDNAMEP, kodvida,SUPPLIER_NAME,SUPPLIER_INN,dt,numberttn,vdecap,capacityp,countp,COALESCE(linkr,'')||iif(vidp <> '',COALESCE('
'||vidr||',
',''),'')||COALESCE(namer,'') as vidnamer,countr,capacityr,itogr,soderg,status,IDP,IDR  FROM journal 
ORDER BY id
Может как то можно увеличить объем памяти выделяемой программе больше 400 магабайт? или ещё какие то причины ошибки могут быть?
ifreestyler вне форума Ответить с цитированием
Старый 05.12.2014, 01:41   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

На ХР по умолчанию - полтора гига на процесс, на семёрке - 2 гига...
Переходите на хранимые процедуры...
kropotkina-alice вне форума Ответить с цитированием
Старый 05.12.2014, 07:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но это необходимо.
Супер! Открыть лям записей чтоб стать на последнюю. А про Select... Order By ты не слышал?
Цитата:
при 400 мегабайтах вылетает ошибка Out of memory.
Сам компонент достигает своего спискового предела. К процессу это не имеет отношения.
Цитата:
и файл подкачки 32Гб.
Размер файла подкачки, как ты его увидел - не показатель. Он не обязательно будет уменьшаться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2014, 09:12   #4
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию

Цитата:
Супер! Открыть лям записей чтоб стать на последнюю. А про Select... Order By ты не слышал?
слышал...конечно правильно было бы сделать order by id DESC и смотреть первую запись..но необходимо именно встать на последнюю...
Может быть можно как то визуально сделать так что грузятся только последние записи, а при скроллинге вверх появлялись другие записи? например как нибудь с помощью хранимой процедуры
Цитата:
Сам компонент достигает своего спискового предела. К процессу это не имеет отношения.
А этот предел можно как то увеличить?
ifreestyler вне форума Ответить с цитированием
Старый 05.12.2014, 10:43   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от ifreestyler Посмотреть сообщение
Пытаюсь в DBGridEh открыть большой массив данных. Около 600к записей.
Наверняка этот "массив" можно разбить на несколько.
Например, по годам (месяцам) или ещё по какому-нибудь критерию.
А то ваша метода выбора напоминает "выбор" Вицина в "Операции Ы", когда он вытаскивает самый нижний горшок из большой стопки горшков...
kropotkina-alice вне форума Ответить с цитированием
Старый 05.12.2014, 10:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Может быть можно как то визуально сделать так что грузятся только последние записи
Если твои компоненты не поддерживают кэширование то никак. Попробуй по свойствам полазить по хелпу посмотреть. Может и найдешь какой-то выход, заставив компонент не все сразу данные запрашивать. Теоретичски такое есть, но я лично всегда делал именно запросами.
Цитата:
конечно правильно было бы сделать order by id DESC и смотреть первую запись..но необходимо именно встать на последнюю...
Откуда такая необходимость всю таблицу стягивать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2014, 11:41   #7
ifreestyler
Пользователь
 
Регистрация: 03.12.2014
Сообщений: 33
По умолчанию

Фактически у меня программа ведения журнала. Соответственно заказчик хочет чтобы можно было просмотреть весь журнал за год...т.е грубо скроликом пролистать весь журнал и посмотреть любую запись..логично было бы сделать фильтры и выводить только нужное, но заказчик хочет именно так..
Вот остается вариант какой нибудь динамической подгрузки данных, типа если дашли до последней записи текущей выборки, показать следующие строки, но пока я не могу представить как это сделать..
ifreestyler вне форума Ответить с цитированием
Старый 05.12.2014, 11:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но заказчик хочет именно так..
Предложи ему делать это посредством формирования репортов.
600 к записей это ничешно так для прокручивания скроллом. А точнее это пользовательская тупость.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Out of memory... Klim Bassenger Microsoft Office Excel 9 17.01.2018 12:56
копирование данных текущей строки DBGridEh В другjq DBGridEh ТипичныйСтудент Помощь студентам 1 06.06.2013 21:19
Load exe into memory and run it from memory artush1984 Win Api 10 06.02.2012 18:43