Текущий архив: 2007.02.25;
Скачать: CL | DM;
ВнизКак отсортировать данные в OracleDataSet? Найти похожие ветки
← →
tytus (2006-11-30 12:04) [0]Доброго дня мастера. В запросе есть Order by ..., делается выборка из ВРЕМЕННОЙ таблицы. Затем по тексту
Session.Commit - следовательно, таблица уже пуста, но набор данных не пустой. Нужно теперь сортировать данные по любому полю (по возр/убыв). Выполнить еще раз запрос, изменив Order by не подходит - долго. Подскажите как можно сортитровать данные в полях НД.
← →
ANB © (2006-11-30 12:54) [1]
> Выполнить еще раз запрос, изменив Order by не подходит -
> долго. Подскажите как можно сортитровать данные в полях
> НД.
Скорее всего сортировка на клиенте будет идти еще дольше - ты же не озаботился создать собственные индексы :)
Совет - таки дергать все повторно из времянки, прикрутив к ней нужные индексы и переключив ее на режим сохранения строк после коммита. Не забудь очищать ее перед заполнением.
← →
Sergey13 © (2006-11-30 12:54) [2]> Затем по тексту Session.Commit - следовательно, таблица уже пуста
Это необязательно. Можно сконфигурировать временную таблицу в контексте сессии. Т.е. данные для сессии будут держаться до прямого указания на удаление или до конца сессии.
А в НД можно отсортировать скопировав данные например в CDS.
← →
Курдль © (2006-11-30 15:11) [3]А с какой целью сортировать? Если для отображения - с этим и средства отображения справляются.
← →
tytus (2006-12-01 11:29) [4]Ну наконец-то! Услышали.!-)
Спасибо всем, а теперь подробнее...
>[1]ANB
Временка не моя, к тому-жо часто используется другими программами, каждая из которых по-своему ее заполняет. И во всех кодах SQL (их много 100..200 х.е.з. сколько) искать и писать DELETE FROM VREMENKA... не представляется осуществимым.
>[2]Sergey13
тоже что и выше, и кто такой CDS???
>[3]Курдль
Да, для отображения. Повторные выборки из [1],[2] проходили, так как были не напряжные. А средсвто отображения - сие есть DBGridEh - токо как ним сортировать не затрагивая НД - пока затрудняюсь.
← →
ANB © (2006-12-01 11:44) [5]
> tytus (01.12.06 11:29) [4]
девэкспрессовский грид может сортировать сам.
Значится 3 решения :
а) перекачать данные в свою времянку до коммита и извращаться с ней
б) перекачать данные в CDS (ClientDataSet) - и с ним уже мучится (я по CDS не спец)
в) использовать девэкспрессовский грид (на больших выборках (более 10 000 может тормозить при пересортировке))
← →
roottim © (2006-12-01 12:10) [6]не делай session.commit - зачем тебе, ибо ты с данными не закончил работу!
← →
Курдль © (2006-12-01 13:11) [7]
> tytus (30.11.06 12:04)
> Доброго дня мастера. В запросе есть Order by ..., делается
> выборка из ВРЕМЕННОЙ таблицы. Затем по тексту
> Session.Commit - следовательно, таблица уже пуста, но набор
> данных не пустой.
> roottim © (01.12.06 12:10) [6]
> не делай session.commit - зачем тебе, ибо ты с данными не
> закончил работу!
Либо вы все бредите, либо я что-то в этом мире не понимаю :(
Что, временная таблица умирает с коммитом?
А за "придержание коммита" вообще кучонки поотрывать надо!
← →
roottim © (2006-12-01 14:20) [8]
> Что, временная таблица умирает с коммитомon commit delete rows
как уж они создали так и пользуются!
← →
ANB © (2006-12-01 14:22) [9]
> А за "придержание коммита" вообще кучонки поотрывать надо!
Ну, если, кроме закачки времянки в этой транзакции ничего не делалось - почему бы и не придержать ?
← →
tytus (2006-12-01 14:29) [10]>ALL
Спасибо всем, скорее всего [9] можно и придержать.
А есть есче бредовая идея - создать TList, в него перегнать данные с таблицы (есть вроде в DBGridEh такое SetColumn GetColumn, счас не помню ), и его сортировать (проверял - на селероне-2G, 256 RAM сортируется 1 000 000 за 1 сек). Но это уже изврат, нутром чую....
← →
Sergey13 © (2006-12-01 14:33) [11]> [4] tytus (01.12.06 11:29)
> Временка не моя
Сделай свою времянку2, какую надо. То-же вариант.
← →
Sergey13 © (2006-12-01 14:37) [12]> [10] tytus (01.12.06 14:29)
> сортируется 1 000 000 за 1 сек
За морем телушка - полушка, да рубль перевоз. (с) народная мудрость.
Ты этот лимон записей запаришся закачивать на клиента. Нафиг вообще столько на клиента тянуть?
← →
tytus (2006-12-01 14:47) [13]>Sergey13 [11]
идея хорошая, немножко напряжная для моего случая [4], но протолкнуть можно.
Насчет [12] - да не лимон там, а гораздо менее (ну макссссимуммм 1000), просто ранее нужно было двигать такие объемы (без БД), и вполне список устраивал (кол-во записей в списке доходило до 2 лимонов). Я уже на эту тему поднимал вопрос в конференции (Общие) но когда это было - не помню, но рэчь шла о сортировке больших списков. Советовали и хеши и др... но это уже отклонение от текущей темы.
← →
Курдль © (2006-12-01 16:17) [14]
> tytus (01.12.06 11:29) [4]
> А средсвто отображения - сие есть DBGridEh - токо как ним сортировать не затрагивая НД
> - пока затрудняюсь.
Взвести опцию типа "сортировка разрешена" и клацать по заголовку поля.
Или сортировка должна управляться как-то с подвыподвертом?
← →
ANB © (2006-12-01 16:19) [15]
> Взвести опцию типа "сортировка разрешена" и клацать по заголовку
> поля.
Оная опция не всеми гридами поддерживается
← →
Курдль © (2006-12-01 16:55) [16]
> ANB © (01.12.06 16:19) [15]
> Оная опция не всеми гридами поддерживается
Указанной аутором DBGridEh разве не поддерживается?..
← →
tytus (2006-12-01 17:16) [17]>Курдль [16]
Есть свойство SortLocal, но что оно и с чем его едять - не знаю.
В компоненты OracleDataSet есть метод
OracleDataSet.FieldList.CustomSort. Но это наверное для списка полей НД, а не для записей... Или я ошибаюсь...
← →
Курдль © (2006-12-01 17:20) [18]
> tytus (01.12.06 17:16) [17]
Ты внятно бизнес процесс описать можешь?
С какой целью сортировка?
Сортировать набор, а потом построчно обрабатывать для получения какого-то результата - это одно.
А сортировать визуально отображаемые записи для улучшения восприятия юзером - это другое.
← →
tytus (2006-12-01 17:58) [19]>Курдль [18]
ни то ни другое.
Короче. Пользователь делает отчет за период (по продаже товара, сколько продано, по какой цене, были ли переоценки /уценки-дооценки/, перемещения с одного склада товара на другой, или ввобще в магазин, кто поставщик товара, номера приходных накладных, остатки ... ну все поняли о чем я).
В форме выбирается дата, склад, учитывать что-то не учитывать, группировать что-то не группировать, цена - учетная/розничная... и т.д. и т.п. Потом вся эта хрень, передается в БД в пакет на выполнение процедур анд функций, по обработке всей этой ... информации (очень мягко выражаясь). Результаты оракл записывает во временную таблицу, с которой потом НД через запрос (может быть и с подвыподвертом) наполняет вышеупомянутую сетку.
Временка одна, а вот таких формочек - до.. много, и все они потом через свои запросики хотят эту временку. Пользователей соответственно тоже много, и прежде чем делать на одной базе отдельную временку, нужно подумать - пригодится ли она в дальнейшем и целесообразно ли ее применение в будущем. А так - одна временка есть - вот ее и танцуйте (анектод такой (с) -).
Далее.
Пользователь видит, что - что-то нарисовалось в сетке. Хорошо. Но ему нужно напечатать красивый отчет (QReport - не очень, FastReport - круче, но мороки больше), да еще и отсортировать результат по возрастанию количества проданного товара, или его суммы, или вообще по фамилии поставщика или кассира, который имел неосторожность целый день забивать в базу эти никому ненужные пиво и водку -))).
Заключение.
Во всех формочках сортировка происходит при повторном выполнении пакета, и соотв-но - наполнению временки. Я пытался аналогично делать - но тормоза страшные.
Вот в двух словах о моем горе.
Наверное буду делать коммит где-то в другом месте.
← →
ANB © (2006-12-01 18:53) [20]
> Наверное буду делать коммит где-то в другом месте.
Дык он тебе вообще не нужен в таком случае - тыж тока времянку набил. Но может быть грабля - где то коммит явно/неявно проскочит и времянка потрется.
Или вариант - сдерни на клиентский набор данных и сортируй его как хочешь.
Страницы: 1 вся ветка
Текущий архив: 2007.02.25;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.071 c