Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вывод больших отчетов / 12 сообщений из 12, страница 1 из 1
16.06.2003, 17:46
    #32183533
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
Проблема такая,
есть база данных (AS/400) коннект через ODBC->ADO (причем довольно медленный),
необходимо вывести некоторые данные в грид.

При небольших количествах данных вполне подходил Excel.
Но столкнулся с ситуацией когда требуется выводить большое количество данных (>100000 записей) если же их также пытаться засунуть в excel,
то это очень и очень на долго особенно при таком фиговом коннекте.

Пытался использовать серверный курсор, но оказалось, что поддерживается только OpenForwardOnly курсор на стороне сервера, вообщем связать это с гридом не получается вылетает с ошибкой
''Dataset does not support bookmarks, which are required for multi-record
data controls'', что и следовало ожидать.

Такая штука как-то реализована к примеру в SQL Explorer (идет вместе с Delphi),а также в Access если использовать связанные таблицы,
когда передаются из сервера не все данные, а часть, которую требуется отобразить на экране в данный момент, а последующая подкачивается при прокрутке

Может кто имел опыт подобных задач, поделитесь советом пжл

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


Заранее спасибо
...
Рейтинг: 0 / 0
16.06.2003, 18:12
    #32183565
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
Может тогда подойдет вариант с постраничным выводом. Способов реализации этого на сиквеле на главном форуме было много, один даже в факе есть.
...
Рейтинг: 0 / 0
16.06.2003, 18:49
    #32183595
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
Не надо идти на поводу заказчика.

Для начала я бы поинтересовался, кто будет смотреть этот отчет? 1600 страниц - это не шутка. Скорее всего, полностью смотреть его НИКТО НИКОГДА не будет. Скорее всего достаточно будет промежуточных итогов по какой-то группировке, может быть многоуровневой и возможности детального просмотра какой-то подгруппы.
Если уж отбрыкаться не удастся, то можно разбить отчет на сотню маленьких, по какой-то группировке, и сводный отчет.
Если и этот вариант не пройдет, то можно сделать на сервере Job, который бы ночью делал этот отчет, зиповал и куда-нить складывал.
...
Рейтинг: 0 / 0
17.06.2003, 08:11
    #32183773
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
А нельзя в другой формат нужные данные слить средствами сервера?
Например, в DBF. Затем качнуть файлы на клиента и работать с ними локально.
Лажа, конечно, но ведь отчеты на 100000 записей не каждый день делаются.
...
Рейтинг: 0 / 0
17.06.2003, 09:13
    #32183797
Dikobrazz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
В Экселе, по-моему, всего лишь 64К строк.
Разве что использовать обычный StringGrid и заполнять его данными программно по мере необходимости.
Или можно использовать RxMemoryData из RxLib в качестве промежуточного хранилища данных.
...
Рейтинг: 0 / 0
17.06.2003, 09:57
    #32183839
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
изврат это - разом сотню тысяч юзеру давать ...
тут от сотни глаза уже в кучу у него а умноженное на тысячу - вааще ничего не увидит ...
...
Рейтинг: 0 / 0
17.06.2003, 11:29
    #32183979
Serge_S
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
... (>100000 записей) ...
Вообще то многовато, но бывает. Но все сразу, естественно никто не будет (не сможет) смотреть, а посему нужно порционально выводить. Пусть листает пока не надоест. Да и ждать на клиенте пока все подгрузится долго. Excel тоже не выход, лучше в HTML если править не надо.

Пытался использовать серверный курсор, но оказалось, что поддерживается только OpenForwardOnly курсор на стороне сервера
А на сервере другой и не нужен. Двунаправленный курсор достигается за счет кеширования уже вычитаных строк - а это память. Задача сервера собрать данные, а не взад-вперед ходить.

Такая штука как-то реализована к примеру в SQL Explorer
SQL Explorer использует БДЕ, а оно именно кеширует. Вот DB Express не кеширует и имеет однонаправленный курсор.


Короче, лучше через Web. Пусть сервер вычитывает и формирует HTML. Браузер начнет показывать таблицу еще до того, как все вычитает - можно начинать смотреть, а остальное в процессе подкачается. Потом можно сохранить в файл и открыть в Word, Excel.
...
Рейтинг: 0 / 0
19.06.2003, 22:26
    #32186939
k2
k2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
Спасибо всем ответившим.

Сделал примерно так.
Большая часть данных которая обычно не меняется в течении текущего дня копируется ночью на более быстрый сервер (MSSQL), остальная онлайновая,
которая гораздо меньше берется с основного сервера.

и вообщем таким объедененным запросом выводится все это дело в грид к клиенту.
скорость получается средняя но более менее терпимо.

Excel действительно не может принять более 64K строк, сразу вылетает.
Web не подошел по причине того , что требовался поиск по данным в определенной колонке и несколько других еще более мелких фичей,
что и пришлось реализовывать в своем гриде (на основе DeveloperExpress грида) .

Но всетаки как то не очень доволен получившимся решением,

наверное еще покапаю в направлении постраничного вывода и кэшированием как в BDE
...
Рейтинг: 0 / 0
19.06.2003, 23:00
    #32186942
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
О-хо-хо... Ну сколько раз уже говорилось, что НЕ НАДО давать юзерам стотысячные гриды. Вы говорите, что надо по столбикам что-то искать? Так создайте навороченную систему поиска-отбора. С удобным выбором вариантов и масок, указанием желательной сортировки. Позаботтесь о тех, кто будет с прогой работать, а не о тех, кто ставит задачу. Ну не бывает, что юзеру нужно было даже 1000 строк! Дайте ему пять строчек, но именно тех, которые он хочет видеть!
Хотя бы в порядке эксперимента. Дайте юзеру возможность выбирать, чем пользоваться, Вашей "китайской стеной" или поисковой формочкой. Да обучите его этой формочкой правильно пользоваться. О Вашем гриде никто и не вспомнит!
...
Рейтинг: 0 / 0
20.06.2003, 08:13
    #32187006
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
Правду говориш брат Cat2. Да только не всегда это правда :-)
есть у меня одна пользовательша, знаток ексела. Так если по ее желанию, ей никакой программы не нужно, она все в экселе сделает сама :-)
и поиск средин нескольких тысяч строк дла нее не проблема :-)

ну ниче, переучиваю ее помаленьку
...
Рейтинг: 0 / 0
20.06.2003, 20:51
    #32187831
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
alex_k. Таких пользовательшей надо давить интелектом. И прежде всего, сообщить им, что в екселе весго 65536 строк. А после этого дать им сводный отчет в их любимом екселе.
...
Рейтинг: 0 / 0
20.06.2003, 21:48
    #32187851
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод больших отчетов
и удобством тоже давить надо :-)
ежели удобно хуй отвертится :-)
ща вот думаю над универсальным(ну почти) классом который бы формочку для условий выдавал и применял к гриду...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вывод больших отчетов / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]