Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.075 c
3-1163439069
FBuilder
2006-11-13 20:31
2007.02.25
mysql stability


15-1170395686
WondeRu
2007-02-02 08:54
2007.02.25
Оцените новую версию сайта "DirectShow по-русски"


2-1170006217
познающий
2007-01-28 20:43
2007.02.25
Русский текст в анг. винде


1-1167851251
lookin
2007-01-03 22:07
2007.02.25
Путь к исполняемому файлу


15-1170402730
Empleado
2007-02-02 10:52
2007.02.25
Всех с Днем Сурка!