Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 22:08

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Поломана функция ExportDBGridEhToOleExcel
СообщениеДобавлено: 07 июн 2013, 15:22 
Не в сети

Зарегистрирован: 07 июн 2013, 15:02
Сообщений: 2
Добрый день.

Сегодня установил EhLib 6.1.129. Ранее была 5.6. Использую функцию ExportDBGridEhToOleExcel. В старой версии все было замечательно. Данные "печатались" в Excel полностью, т.е. грид вытаскивал из DataSet`а все записи..

Использую компоненты доступа Devart IBDac, версия которых не изменилась. Параметр FetchRows = 100, т.е. по-умолчанию "выдаются" по 100 записей либо, если больше, столько, сколько вмещается на экран. Т.е. грид вынуждает датасет выдать записи.
Цитата:
Syntax
property FetchRows: integer default 25;
Remarks
The number of rows that will be transferred across the network at the same time. This property can have a great impact on performance. So it is preferable to choose the optimal value of the FetchRows property for each SQL statement and software/hardware configuration experimentally.
The default value is 25.

Грубо говоря. Открываю таблицу. В ней, к примеру, 100 000 записей. Записи выдаются пачками по 100, при FetchRows = 100, при навигации по гриду вниз, при попытке перехода на 101-ю запись, выдается следующая партия записей. Т.е. в гриде будет уже 200 записей. И так далее. Остальные 99 800 записей пока не показываются в гриде..

В версии 5.6 при вызове функции ExportDBGridEhToOleExcel все замечательно - сколько бы записей не было показано в гриде, экспортируются они все, которые есть в запросе. В новой версии - нет. Только видимые в гриде записи.

В справке описание параметров функции ExportDBGridEhToOleExcel не нашел. Может кто подскажет чего где подкрутить?

Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Поломана функция ExportDBGridEhToOleExcel
СообщениеДобавлено: 08 июн 2013, 08:54 
Не в сети

Зарегистрирован: 20 дек 2011, 22:36
Сообщений: 46
Цитата:
В версии 5.6 при вызове функции ExportDBGridEhToOleExcel все замечательно - сколько бы записей не было показано в гриде, экспортируются они все, которые есть в запросе. В новой версии - нет. Только видимые в гриде записи.


Я бы сказал наоборот починили.
Вот у Вас в таблице 100 000 записей, при экспорте все они должны выбраться из датасета, что на самом деле не всем нужно, а нужна только выбранная часть, вот она и печатается. Чтобы распечатать все записи соответственно нужно выбрать все из датасета перед печатью.
Самое простое
IBQuery1.FetchAll := True;
или
Код:
IBQuery1.DisableControls;
//при необходимости запоминать позицию/отменять события итд
while not IBQuery1.Eof do
  IBQuery1.Next;
IBQuery1.EnableControls;


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Поломана функция ExportDBGridEhToOleExcel
СообщениеДобавлено: 08 июн 2013, 18:35 
Не в сети

Зарегистрирован: 07 июн 2013, 15:02
Сообщений: 2
Спасибо. Только
Код:
Query.FetchAll := True
замедлит работу и увеличит потребление памяти. Вместо
Код:
Query.DisableControls;
//при необходимости запоминать позицию/отменять события итд
while not Query.Eof do
  Query.Next;
Query.EnableControls;
можно
Код:
Query.Last;
и далее вызвать ExportDBGridEhToOleExcel(...) Только это не выход. К примеру, пользователь хочет выбрать какие-либо записи, удовлетворяющие его условию. Выбирает записи. Записей 300. Это относительно немного. Нажимает, допустим, Button, на которую повешена ExportDBGridEhToOleExcel. Открывается Excel и пользователь замечает, что экспортируются не все записи, а только видимые в гриде. Да, можно добавить строчку в виде Query.Last; Делать это теперь придется для всех гридов в проекте. Может есть какие-либо другие способы?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Поломана функция ExportDBGridEhToOleExcel
СообщениеДобавлено: 09 июн 2013, 11:18 
Не в сети

Зарегистрирован: 20 дек 2011, 22:36
Сообщений: 46
Можно по проекту быстро заменить ExportDBGridEhToOleExcel на MyExportDBGridEhToOleExcel где первым делом делать DBGridEh.DataSource.DataSet.Last; а затем вызывать ExportDBGridEhToOleExcel


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB