| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Вывод номера записи через select |
| Автор: Delphist 6.10.2008, 14:59 | ||||||
| Скажите, пожалуйста, как с помощью select сделать так, чтобы дополнительно выводилось поле с номером строки. Т.е. есть у нас таблица MyTable с 3-ми полями: ROW_ID, RAW_NAME, RAW_TYPE_ID сделав вот такой запрос:
выполнив такой запрс, мы получим список сырья с типом=2. Хотелось бы еще, чтобы каждая запись пронумеровалась т.е. типа вот этого
Возможно ли такое с использованием Firebir 2.0 На sql.ru предложили вот такой вариант:
но он меня не очень устраивает, мож есть другие спообы. |
| Автор: Deniz 6.10.2008, 15:34 |
| Delphist, можно посмотреть в сторону for select ... |
| Автор: Delphist 6.10.2008, 15:44 |
Через хранимую процедуру как то не хотелось, потому как сортировкой а как следствие и нумерация строк хотелось бы управлять на клиенте |
| Автор: Deniz 6.10.2008, 15:59 |
| так может грид какой умеет это делать? или в CDS запихнуть? |
| Автор: Delphist 6.10.2008, 16:27 |
| [quote=Deniz, 6.10.2008, 16:59, post1660238]так может грид какой умеет это делать? Гридом я пользуюсь EhLib'овским. И мне необходимо, чтобы номера строк хранились все же в DataSet'e. Что такое CDS? |
| Автор: Akella 6.10.2008, 17:10 | ||
| Добавлено @ 17:17 http://www.sql.ru/faq/faq_topic.aspx?fid=126 вспомнил
DB_KEY ID NAME EXP 156:1 1 + T 156:2 2 - T 156:3 5 хол. T 156:4 7 хол+гор. T 156:5 10 колодец T 156:6 11 колонке T 156:7 20 по улице T 156:8 81 ? T результаты из IBExpert |
| Автор: Akella 6.10.2008, 17:28 |
| теперь в событии столбца ongettext, помоему, парсим результат и показываем всё, что справа от двоеточия Добавлено через 1 минуту и 14 секунд тоже прекрасный вариант с хранимкой или execute block`ом |
| Автор: vladimir74 6.10.2008, 17:35 |
ты уверен что это работает? я у себя на firebird посмотрел - w.rdb$db_key возвращает 16-чный код и не по порядку... надо в документации посмотреть что это.... |
| Автор: vladimir74 6.10.2008, 18:00 | ||
| ок. только что честно спионерил с http://www.ibase.ru/ibfaq.htm#dbkey
а тут правда http://entwickler-forum.de/showthread.php?t=7784 |
| Автор: Akella 7.10.2008, 16:28 |
| vladimir74, никто не пионерил Добавлено через 1 минуту и 19 секунд кто/что возвращает? |
| Автор: vladimir74 7.10.2008, 17:08 | ||
неправда!! я сам и спионирил, когда ты написал!!! сам не знал про это пошел погуглям, и сам нарвался на эту статью что и дал тут ссылку!!! у меня. Во всяком случае ничего типа я не получил. у меня вот такой вывод получился (кусок из моей таблицы)
кстати заметил, что данные занесенные последовательно в одну таблицу имеют последовательный порядковый номер. Отсюда делаю вывод, что как бы небыл записан rdb$db_key там хранится не только порядковый номер записи... Может я в чем то и не прав, не знаю.... |
| Автор: vladimir74 8.10.2008, 09:27 | ||||
ну ладно, самого IBExpert`а я не использовал, даные получаю едентичными в SQL Manager и если пользую компаненты IB-Objects, из программы на Delphi... Не хочешь же ты сказать что IBExpert выводит данные не так как все другие?!!! FireBird 2.0.2 (хотя может и выше, если уже Update сделали что обещали) Добавлено через 6 минут и 42 секунды
ну все таки одно дело прочитать и запомнить, другое - услышать что то пойти найти и запостить
да ладно, а вдруг я бы писал от соседки |
| Автор: Akella 8.10.2008, 19:03 | ||||
т.е. ты не уверен? Добавлено через 21 секунду
поэтому и спросил |
| Автор: vladimir74 9.10.2008, 09:57 |
ну как тебе сказать... нет. У нас несколько серверов. Один наш тестовый, и три на котором сидят живые пользователи. Чаще всего если начальству взбредет в голову обновить версию, они делают это на тестовом сервере. Если пару недель все нормально, то идет обновление всех серверов. Все бы хорошо, но вот последний раз я узнал об обновлении когда уже собирались обновлять все сервера.... ерунда какая то.... что то тяжело в это верится... Добавлено через 4 минуты и 36 секунд но если ты прав, то я лучше буду работать с тем, что дает мне реальные данные (как минимум совпадающими с тем что я прочитал на ibase.ru) |
| Автор: Akella 9.10.2008, 12:52 | ||
| Так ты, если тебе это интересно, возьми и выполни код с использованием разных способов/технологий доступа: IBX, FibPlus, в разных гридах отобрази данные, используй базы с разными кодировками. Добавлено через 4 минуты и 21 секунду С использованием FIBPlus 6.9.5 + EhLib 4.2^
результат: ![]() Обрати внимание на последние цифры. Возможно, что IBExpert это переводит более читабельный формат |
| Автор: vladimir74 9.10.2008, 14:32 | ||
с таблицей в которую записи записывались одна за другой (типа таблиц справочников) у меня все точно так же. Но вот если в таблицу было записана одна запись, потом несколько записей в другую таблицу, потом редактирование или удаление из первой таблицы (вобщем нормальная работа крупной базы) у меня получилось то что я тебе показал... не знаю если будет время то поиграюсь, вообще вещь теоретически интересная, но мне пока на практике не разу небыла нужна, потому наверное и не знал... Ах да, как оказалось я дклал тест на версии 2.0.0 :( руководство опять начало играться... обещали на неделе привести все сервера на одну версию... |
| Автор: Akella 10.10.2008, 16:20 |
и мне тоже, если нужно было вывести в отчёт, то в фастрепорте это реализовано |
| Автор: Regulum 14.12.2016, 19:14 | ||||
| Поднимем тему. Возникла аналогичная задача в Lazarus - сильно глючило свойство TSQLQuery.RecNo в связке с TRxDBGrid. Сервер Firebird 2.5, соответственно функции ROW_NUMBER() нет. Покурив форумы, нашел решение через контекстную переменную. Может кому пригодится. Для запроса топикстартера это будет выглядеть так:
Есть один нюанс - перед запросом нужно обNULLять контекстную переменную 'RowNum'
|