Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

Как отсортировать данные в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.053 c
4-1160674602
alexold
2006-10-12 21:36
2007.02.25
Чтение файла размером больше 2 Гбайт


2-1170738550
Lapushka-dochka
2007-02-06 08:09
2007.02.25
Где моя ошибка, кодскажите, плз.


15-1170506369
Trible
2007-02-03 15:39
2007.02.25
тематические картинки


11-1149954658
Фдуч
2006-06-10 19:50
2007.02.25
Помогите с PCAsm


4-1160667022
DmitryFox
2006-10-12 19:30
2007.02.25
Тень под формой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский