Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизПронумеровать строки в ДБГриде, причем когда я делаю сортировку.. Найти похожие ветки
← →
Relaxxx (2003-09-03 14:48) [0]Пронумеровать строки в ДБГриде, причем когда я делаю сортировку по какому то полю это поле не сортируется как все остальные. Да и RowNum не подходит у веня версия оракла старовата и он неправельно работает когда используеш ордер бай
← →
Vlad (2003-09-03 14:56) [1]select rownum, a.* from (select ......... order by.....) a
и версия оракла тут не причем.
← →
DenK_vrtz (2003-09-03 14:58) [2]Как так <RowNum не подходит>?
Какая версия Oracle?
Запрос?
← →
Relaxxx (2003-09-03 15:12) [3]Версия Оракл 8.0.5, что RowNum сдесь с вложеным запросом не пашет ет точно, я спрашивал на sql.ru в форуме Оракл, прявельно RowNum работает в 8,5 и выше, а у меня когда я пишу
select rownum, a.* from (select Date_chet FROM mon Date_chet ORDER BY Date_chet) a
мне пишет ошибку перед ORDER BY, мол отсутствует правая скобка, так что РоуНум я думаю отпадает
← →
Relaxxx (2003-09-03 15:19) [4]Так как мне обойтись без роунум, я как то в Делфи дтнамически создавать поле которое нумеруется??
← →
Relaxxx (2003-09-03 16:16) [5]АУ народ, вы что незнаете????????????????????
← →
DenK_vrtz (2003-09-03 16:24) [6]Много данных в запросе?
Если нет, сделай временную таблицу, что ли, такой же структуры + поле "№ п/п" и перекинь в нее данные с заполнением этого поля.
А лучше версию Oracle другую поставь :-)
← →
Relaxxx (2003-09-03 16:26) [7]Ясно, данных ДОФИГА, а нащет новой версии Оракл, то в ближайшем будущем я так и сделаю, но все равно жаль что динамически это никак нельзя реализовать :-(
← →
Sergey13 (2003-09-04 10:32) [8]2Relaxxx © (03.09.03 16:26) [7]
>Ясно, данных ДОФИГА, а нащет новой версии Оракл, то в ближайшем будущем я так и сделаю,
И ничего не добьешся. Rownum показывает номер строки при ВЫБОРЕ записей ДО сортировки. И версия тут ни при чем. На 8.1.6 тока щас проверил.
>но все равно жаль что динамически это никак нельзя реализовать :-(
Почему? Vlad © (03.09.03 14:56) [1] правильно сказал, а свой запрос исправь
>select rownum, a.* from (select Date_chet FROM mon Date_chet ORDER BY Date_chet) a
и все будет ОК.
Тока остается вопрос - а нафига это все надо? В смысле зачем вообще этот номер?
← →
Vlad (2003-09-04 10:44) [9]Sergey13 ©, что-то не понятно, что конкретно ему нужно исправить ?
Ты вроде тот же запрос написал что и он ?
А по поводу RowNum, если мне не изменяет память, я его еще на семерке использовал и вроде глюков не наблюдал...
← →
DenK_vrtz (2003-09-04 10:51) [10]Sergey13 ©,
Vlad ©,
собственно говоря сам не понимаю почему, но в 8.0.5 на такую конструкцию действительно ругается, а 8.1.6 все работает без вопросов
← →
Vlad (2003-09-04 10:56) [11]DenK_vrtz © (04.09.03 10:51) [10]
К сож. нет под рукой 8.0.5.
A ты не мог бы проверить тоже, но без RowNum, будет работать ? Т.е. хотелось бы понять, в чем ошибка - в самой конструкции или в использовании RowNum ?
← →
DenK_vrtz (2003-09-04 11:07) [12]Vlad ©, все дело похоже в order by
Написал запросы вида:
(все в 8.0.5)
select rownum, поле from (select поле from таблица) - работает,
select поле from (select поле from таблица) - работает,
select rownum, поле from (select поле from таблица order by поле) - не работает
select поле from (select поле from таблица order by поле) - не работает
← →
Sergey13 (2003-09-04 11:09) [13]2Vlad © (04.09.03 10:44) [9]
>что-то не понятно, что конкретно ему нужно исправить ?
Удалить из запроса выделенное мной Date_chet. Или пояснить мне что это такое. 8-)
← →
Vlad (2003-09-04 11:15) [14]Sergey13 © (04.09.03 11:09) [13]
Зачем ? Это простой алиас таблицы, что тут такого ?
А то что он совпадает с именем поля - так это ничего страшного.
← →
Vlad (2003-09-04 11:26) [15]>DenK_vrtz © (04.09.03 11:07) [12]
А если попробовать индекс вместо ORDER BY использовать ? (если он есть конечно)
select rownum, a.* from (select /*+index(mon By_Date_CHET)*/ Date_chet
FROM mon) a
Как думаешь, сработает ?
← →
Sergey13 (2003-09-04 11:34) [16]Vlad © (04.09.03 11:15) [14]
>А то что он совпадает с именем поля - так это ничего страшного.
Совпадающий с именем поля? Странный алиас, ИМХО.
Хотя.... щас попробовал - на 8.1.6 отработало. Странно. 8-( Может на эту "странность" 8.0.5 и ругается? Проверить не начем.
Блин, DenK_vrtz © (04.09.03 11:07) [12] уже попробовал. 8-)
← →
Sergey13 (2003-09-04 11:43) [17]2Vlad © (04.09.03 11:26) [15]
>Как думаешь, сработает ?
ИМХО, может помочь, но гарантии никто не даст. Помню обсуждение (не здесь) о сортировках внутри веток в дереве. Тогда сошлись на этом.
Остается вопрос - зачем все это надо, причем с такими извратами.
← →
Vlad (2003-09-04 11:43) [18]Sergey13 © (04.09.03 11:34) [16]
Ну да, нехорошо конечно давать такие алиасы. Я бы так не делал.
Но тем не менее, Оракл проглатывает.
Вобщем, Relaxxx ©, уважаемый, сдается мне что тебе нужно создать индекс по полю Date_chet (если такового нет) и использовать конструкцию, приведенную мной в [15]. Должно работать.
← →
Vlad (2003-09-04 11:45) [19]>Sergey13 © (04.09.03 11:43) [17]
Хинты в оракле, конечно скользкая штука....
Но если есть гарантия что никто не удалит индекс, то должно работать корректно.
← →
DenK_vrtz (2003-09-04 11:51) [20]Vlad ©,
Sergey13 ©,
попробовал я конструкцию вида
select rownum, a.* from (select /*+index(mon By_Date_CHET)*/ Date_chet
FROM mon) a, в 8.0.5 работает, но
записи почему то не сортирует
Почему?
← →
Vlad (2003-09-04 11:56) [21]>DenK_vrtz © (04.09.03 11:51) [20]
Думаю что нет индекса с именем By_Date_Chet
← →
DenK_vrtz (2003-09-04 11:59) [22]Индекс есть, НО, записи в запросе сортируются по значению primary key
← →
Vlad (2003-09-04 12:04) [23]Гы :) Думаю что-то в настройках оптимизатора...
А если просто попробовать:
select /*+index(mon By_Date_CHET)*/ Date_chet FROM mon
Тоже не будет сортировать ?
План запроса что говорит ?
← →
Vlad (2003-09-04 12:06) [24]Самое интересное что у меня на девятке такая конструкция пашет :)
← →
DenK_vrtz (2003-09-04 13:49) [25]Vlad ©, продолжаем разговор :-)
Так вот. Я вот одного не могу понять почему на девятке это пашет?
Спросил у администратора базы и вместе с ним литературу глянули.
Конструкция или хинт /*+index(tablename index)*/, говорит о том, чтобы просматривать таблицу с помощью установленного индекса, но не упорядочивать данные в зависимости от него!
Может в девятке, что-то поменялось?!
План ничего дельного не показывает, типа выбрал все и все!
Да, еще. У тебя случайно нет литературы в электронном виде (желательно на русском) с примерами по работе с DOA?
Если есть, скинь на мыло, пожалуйста, очень надо!
← →
Sergey13 (2003-09-04 13:49) [26]2Vlad © (04.09.03 12:04) [23]
А вот интересно - если по умолчанию стоит RULE, то хинты вообще работать будут? Ини же вроде только для стоимостного предназначены. Или я ошибаюсь?
← →
Sergey13 (2003-09-04 13:58) [27]2DenK_vrtz © (04.09.03 13:49) [25]
Я тебе выслал доку по v3.4. Придет попозже - почта у меня так работает. 8-(
А вот еще интересно, а в случае с одинаковым значением индексного поля порядок чем будет задаваться? И будет ли он постоянным?
А вообще мой вопрос к автору остается в силе - НА ФИГА?
ЗЫ: А Relaxxx наверное расслабляется. 8-)
← →
DenK_vrtz (2003-09-04 14:03) [28]Sergey13 ©, спасибо огромное!!!
← →
Vlad (2003-09-04 14:03) [29]>DenK_vrtz © (04.09.03 13:49) [25]
Чесно сказать, я не был уверен что в восьмерке это запашет.
Но в девятке сортирует именно в порядке индекса. А план должен показать - подцепил он этот индекс или нет.
А насчет DOA, спец. литературы никакой нет, все осваивал по хелпу. Тут вобщем достаточно подробно все описано. Одна беда - open source нет !
Но если найду чего - пришлю.
Sergey13 © (04.09.03 13:49) [26]
>Чесно говоря с оптимизатором не оч. знаком. Поэтому не могу сказать точно.
← →
Sergey13 (2003-09-04 14:16) [30]Vlad © (04.09.03 14:03) [29]
> Одна беда - open source нет !
Тебе open именно или просто source? 8-)
Глянь на http://oraclebones.narod.ru/
← →
Vlad (2003-09-04 14:18) [31]Sergey13 © (04.09.03 14:16) [30]
Спасибо, посмотрю.
Нда.. кстати, я тут вспомнил о изначальном вопросе. Допустим сортировка с помощью индекса прокатит. Но кажись парню нужно сортировать по разным полям таблицы, возможно даже по всем. ИМХО, создавать индексы для всех полей - жирно будет... :-)
Резюмировав, могу предположить, что в ДатаСете без извращений нумеровать строчки не выйдет.
Т.е. можно конечно в SELECT"е дать фиктивное поле со значением Null, а на клиенте после открытия датасета в цикле проставить ему номера. Но это через "одно место".
← →
Sergey13 (2003-09-04 14:27) [32]2Vlad © (04.09.03 14:18) [31]
>Нда.. кстати, я тут вспомнил о изначальном вопросе.
Дык я уже раз пять спрашивал автора - НА ФИГА? Боюсь что ответ будет (если будет) - так юзер хочет "как в экселе", а зачем не говорит.
← →
DenK_vrtz (2003-09-04 14:28) [33]Интересно, почему Relaxxx © молчит!? Думает наверно! :-)
← →
Vlad (2003-09-04 14:38) [34]Sergey13 ©, ты Direct Oracle Access 3.4.6.4 пробовал ставить, скачанный с сайта, который ты привел ?
У меня при запуске инсталляции I/O error возникает.
А source я имел ввиду Oracle.pas и OracleData.pas
Вот в 3.4.3 их нет. Есть только *.DCU
← →
Sergey13 (2003-09-04 14:53) [35]2Vlad © (04.09.03 14:38) [34]
>ты Direct Oracle Access 3.4.6.4 пробовал ставить, скачанный с сайта, который ты привел ?
Нет. Она там только на Д6. У меня Д5 и я ставил 3.4.6.1.
>А source я имел ввиду Oracle.pas и OracleData.pas
У меня есть.
← →
roottim (2003-09-04 14:59) [36]http://www.sql.ru/faq/faq_topic.aspx?fid=132
а order by в подзапросе действительно работает сравнительно недавно
← →
DenK_vrtz (2003-09-04 15:02) [37]К вопросу о DOA.
Никак не могу понять(может совсем отупел), как пользоваться обычными методами Insert, Edit у OracleDataSet(или перевести его в эти состояния, постоянно пишет, что запрос в read-only)? или обратиться к таблице(представлению) как в TTable? Как выполнить функцию, которая возвращает курсор или работать с BLOB-полями?
Sergey13 ©, почта не пришла! :-(
← →
Sergey13 (2003-09-04 15:06) [38]2DenK_vrtz © (04.09.03 15:02) [37]
Добавь в строку запроса ROWID редактируемой таблицы типа
select a.*,a.rowid from tabla a
запрос станет редактируемым.
← →
Vlad (2003-09-04 15:09) [39]>DenK_vrtz © (04.09.03 15:02) [37]
Чтобы датасет был НЕ ReadOnly нужно чтоб он имел rowid. Соотв. если запрос сложный, те. сост. из неск-ких таблиц, то такой набор не будет иметь rowid. И DOA сам не сможет определить какую именно запись нужно апдейтить. Поэтому на событие OnApplyRecord (см хелп) нужно явно указывать как и что апдейтить. И если сказать Applied:=true, то DOA понимает что ты сам задал условие апдейта, и убирает ReadOnly с датасета.
Немного коряво объяснил, ну ладно..
← →
Vlad (2003-09-04 15:11) [40]Sergey13 © (04.09.03 15:06) [38]
А если запрос сложный, то rowid не будет.
Есть вариант добавить фиктивный rowid. Напр.
Select ChartoRowid(null) "rowid", .........
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.014 c