Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
шК0ДЕР
Добрый день. К дб гриду (TDBGridEh - компонент EhLib 8.0 build 8.0.023) прикручен датасет. FetchAll := False естественно, т.к записей возвращается много, до 100к. Имеется функционал по выводу данных из грида в эксель(самописный).

Возможно, отвечаю не совсем по заданному вопросу
Имеет ли смысл выгрузить все данные в грид DBGridEh1 и потом выгрузить все в Excel средствами от EhLib
следует использовать модуль DBGridEhImpExp
uses
DBGridEhImpExp

и выгружать данные из таблицы в Excel без всякого гемора - всего лишь одной строчкой кода
ExportDBGridEhToXlsx(DBGridEh1, 'Тут нужно указать имя файла Excel',[]);

у меня по крайней мере работает и на бОльших данных
использую следующую связку: "Embarcadero® Delphi 10 Seattle Version 23.0.20618.2753" + "компонент EhLib 8.0 build 8.0.021"
20 ноя 17, 16:39    [20969767]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
makhaon
как раз таки Prev/First сделать не проблема
Интересно, как, не храня буффер предыдущей записи на клиенте, когда на сервере её уже нет.
20 ноя 17, 16:50    [20969823]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
шК0ДЕР
Member

Откуда: Сызрань, городок на Волге
Сообщений: 71
Vladimir779, на рабочей форме пользователя такое кол-во позиций явно будет лишним. Придется в момент печати выводить в грид все позиции, а после печати обратно скрыть лишнюю тонну данных. Завтра обязательно попробую. Интересно на сколько быстро будет весь объем в грид выгружаться, т.к событие OnDrawDataCell обрабатывается. Код небольшой, но все же...
20 ноя 17, 17:05    [20969868]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
Vladimir779
шК0ДЕР
Добрый день. К дб гриду (TDBGridEh - компонент EhLib 8.0 build 8.0.023) прикручен датасет. FetchAll := False естественно, т.к записей возвращается много, до 100к. Имеется функционал по выводу данных из грида в эксель(самописный).

Возможно, отвечаю не совсем по заданному вопросу
Имеет ли смысл выгрузить все данные в грид DBGridEh1 и потом выгрузить все в Excel средствами от EhLib
следует использовать модуль DBGridEhImpExp
uses
DBGridEhImpExp

и выгружать данные из таблицы в Excel без всякого гемора - всего лишь одной строчкой кода
ExportDBGridEhToXlsx(DBGridEh1, 'Тут нужно указать имя файла Excel',[]);

у меня по крайней мере работает и на бОльших данных
использую следующую связку: "Embarcadero® Delphi 10 Seattle Version 23.0.20618.2753" + "компонент EhLib 8.0 build 8.0.021"

Совсем обалдели. В грид-то - зачем грузить?
20 ноя 17, 17:08    [20969883]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
шК0ДЕР
...Имеется функционал по выводу данных из грида в эксель(самописный). Для этого нужно знать общее кол-во записей в датасете...

Расскажи, пожалуйста - для чего тебе при выводе в эксель знать общее количество записей в датасете?
20 ноя 17, 17:25    [20969926]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
чччД,

для того что бы содержимое грида выгрузить в Эксель
20 ноя 17, 17:45    [20969969]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
шК0ДЕР
Vladimir779, на рабочей форме пользователя такое кол-во позиций явно будет лишним. Придется в момент печати выводить в грид все позиции, а после печати обратно скрыть лишнюю тонну данных. Завтра обязательно попробую. Интересно на сколько быстро будет весь объем в грид выгружаться, т.к событие OnDrawDataCell обрабатывается. Код небольшой, но все же...


Попробуй вариант со скрытым гридом от глаз пользователя, грид для выгрузки данных в Эксель, в этом гриде можешь не использовать событие OnDrawDataCell
20 ноя 17, 17:48    [20969993]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
чччД
знать общее количество записей в датасете?
Vladimir779
что бы содержимое грида выгрузить в Эксель
не вижу взимосвязи
20 ноя 17, 18:09    [20970035]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
Vladimir779
шК0ДЕР
Vladimir779, на рабочей форме пользователя такое кол-во позиций явно будет лишним. Придется в момент печати выводить в грид все позиции, а после печати обратно скрыть лишнюю тонну данных. Завтра обязательно попробую. Интересно на сколько быстро будет весь объем в грид выгружаться, т.к событие OnDrawDataCell обрабатывается. Код небольшой, но все же...


Попробуй вариант со скрытым гридом от глаз пользователя, грид для выгрузки данных в Эксель, в этом гриде можешь не использовать событие OnDrawDataCell


Это троллинг такой, что ли?
Или просто альтернативно одаренные общаются?
20 ноя 17, 18:43    [20970091]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 5630
чччД
Попробуй вариант со скрытым гридом от глаз пользователя, грид для выгрузки данных в Эксель, в этом гриде можешь не использовать событие OnDrawDataCell


Это троллинг такой, что ли?
Или просто альтернативно одаренные общаются?[/quot]

Ну как это зачем? Чтобы побольше граблей в темной комнате раскидать, а потом героически с ними бороться.
20 ноя 17, 18:56    [20970120]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 5630
чччД,

Что-то цитирование съехало напрочь :(
20 ноя 17, 18:56    [20970122]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
DarkMaster
Ну как это зачем? Чтобы побольше граблей в темной комнате раскидать

Не только, а чтобы еще в 2 раза более правильным казалось, для самоутверждения, решение перейти на 64 бита.
20 ноя 17, 18:58    [20970128]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
_Vasilisk_
чччД
знать общее количество записей в датасете?
Vladimir779
что бы содержимое грида выгрузить в Эксель
не вижу взимосвязи

я изначально указал "Возможно, отвечаю не совсем по заданному вопросу"
именно поэтому не видно никакой взаиомосвязи
20 ноя 17, 19:30    [20970172]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
DarkMaster
чччД
Попробуй вариант со скрытым гридом от глаз пользователя, грид для выгрузки данных в Эксель, в этом гриде можешь не использовать событие OnDrawDataCell

Это троллинг такой, что ли?
Или просто альтернативно одаренные общаются?

Ну как это зачем? Чтобы побольше граблей в темной комнате раскидать, а потом героически с ними бороться.[/quot]
Критиковать все могут, а можешь предложить рабочий вариант, и что бы без граблей ?
20 ноя 17, 19:31    [20970176]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
DarkMaster
Ну как это зачем? Чтобы побольше граблей в темной комнате раскидать, а потом героически с ними бороться.

Критиковать все могут, а можешь предложить рабочий вариант, и что бы без граблей ?
20 ноя 17, 19:32    [20970180]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
Vladimir779
DarkMaster
Ну как это зачем? Чтобы побольше граблей в темной комнате раскидать, а потом героически с ними бороться.

Критиковать все могут, а можешь предложить рабочий вариант, и что бы без граблей ?

Ну, напрягись чуть-чуть.
Подсказки:
1. Задумайся по поводу: "а для чего грузить весь датасет в память, если экспорт в MS Excel все равно выполняется построчно?"
2. И тем более - для чего к этоve несчастному датасету подключать TDBGridEh, если ты вообще не собираешься этот грид показывать.
3. Посмотри на реализацию класса TDBGridEhExportAsXLS - там комментария больше, чем кода. А полезного кода - пара десятков строк всего.
20 ноя 17, 20:02    [20970222]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2091
Vladimir779,

Так я же уже всё расписал :) Если отображать в гриде не нужно, то незачем тащить набор в память. Если нужно, то нужно либо 64х, либо ограничивать размер выборки. Считать количество компонентой тоже не нужно, а запросом. Даже запрос написал :)

makhaon
как раз таки Prev/First сделать не проблема

YuRock
Интересно, как, не храня буффер предыдущей записи на клиенте, когда на сервере её уже нет.


Да, точно, набор однонаправленный же. Неверно написал.
20 ноя 17, 22:51    [20970545]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
DimaBr
Member

Откуда:
Сообщений: 10273
Ой сомневаюсь что пользователю понравится файл с 100к строк.

Посадить бы дарование, чтобы написал формулу в полученном Экселе для умножения суммы 1,3,5,7,9 стоки на разнность в 2,4,6,8,10, в каждом чётном десятке. По всем 100к строчкам.
20 ноя 17, 22:55    [20970553]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
DimaBr
Ой сомневаюсь что пользователю понравится файл с 100к строк.

Посадить бы дарование, чтобы написал формулу в полученном Экселе для умножения суммы 1,3,5,7,9 стоки на разнность в 2,4,6,8,10, в каждом чётном десятке. По всем 100к строчкам.

Мы недавно задание специальное выполняли, по реализации отчета несуразных размеров и структуры. Уж что там заказчик собирается с ним делать - не наша забота.
Возможно, он его (за неделю, не быстрее) распечатает, украсит подписями и печатями, погрузит на грузовики и отвезет в глубокий подземный бункер.
20 ноя 17, 23:03    [20970563]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
DimaBr
Ой сомневаюсь что пользователю понравится файл с 100к строк.
Был у меня случай, когда клиент возмутился тем, что в отчет в экселе попадают только первые 65535 строк. Вот тогда и пришлось на xlsx переходить)
20 ноя 17, 23:57    [20970654]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
DimaBr
Member

Откуда:
Сообщений: 10273
А некоторые по миллиону в Лукап пихают
21 ноя 17, 01:26    [20970721]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Dunkin
Guest
makhaon
Если нужно, то нужно либо 64х, либо ограничивать размер выборки. Считать количество компонентой тоже не нужно, а запросом. Даже запрос написал :)

64 бита не решат проблему времени при загрузке данных в датасет. Компонент тоже специфический и как раз выполняет select count(*) в CountAllRecords.

Как уже написали, грузить всё не нужно.
У TOracleDataSet есть свойство UniDirectional. Но лучше использовать TOracleQuery.
21 ноя 17, 02:54    [20970746]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
Vladimir779
Member

Откуда:
Сообщений: 63
чччД
Ну, напрягись чуть-чуть.
Подсказки:
1. Задумайся по поводу: "а для чего грузить весь датасет в память, если экспорт в MS Excel все равно выполняется построчно?"
2. И тем более - для чего к этоve несчастному датасету подключать TDBGridEh, если ты вообще не собираешься этот грид показывать.
3. Посмотри на реализацию класса TDBGridEhExportAsXLS - там комментария больше, чем кода. А полезного кода - пара десятков строк всего.

Возможно, я чего-то недопонимаю, благодарю за наводку, в свободное время рассмотрю каждый пункт
21 ноя 17, 07:09    [20970819]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
шК0ДЕР
Member

Откуда: Сызрань, городок на Волге
Сообщений: 71
DimaBr
Ой сомневаюсь что пользователю понравится файл с 100к строк.

Это справочники товара и прайс листы, пользователям(финансистам, маркетологам) именно НУЖНО, в противном случае и тему не завел бы.
DimaBr
Посадить бы дарование, чтобы написал формулу в полученном Экселе для умножения суммы 1,3,5,7,9 стоки на разнность в 2,4,6,8,10, в каждом чётном десятке. По всем 100к строчкам.

Никакие вычисления там не требуются, а если бы и требовались, то производились исключительно на сервере...
21 ноя 17, 08:11    [20970854]     Ответить | Цитировать Сообщить модератору
 Re: Утечка памяти при работе с DataSet  [new]
чччД
Guest
Vladimir779
чччД
Ну, напрягись чуть-чуть.
Подсказки:
1. Задумайся по поводу: "а для чего грузить весь датасет в память, если экспорт в MS Excel все равно выполняется построчно?"
2. И тем более - для чего к этоve несчастному датасету подключать TDBGridEh, если ты вообще не собираешься этот грид показывать.
3. Посмотри на реализацию класса TDBGridEhExportAsXLS - там комментария больше, чем кода. А полезного кода - пара десятков строк всего.

Возможно, я чего-то недопонимаю, благодарю за наводку, в свободное время рассмотрю каждый пункт

Ну да, думать некогда... трясти надо...
21 ноя 17, 09:17    [20971016]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Delphi Ответить