|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.02.2009, 14:57 | #1 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
DBGrid: Как сделать собственную сортировку данных?
Стоит задача, есть тысячи записей, с текстовым полем "обозначения", значения в нём вида "IZD1-LM-123456-789-00029"
отсортировать нужно, скажем, по последним пяти цифрам, или по предпоследним трём, в общем, если написать собственную функцию, распарсить - проблем с сортировкой не было бы. Но! Вся логика программы (писал не я) построена на вывод в DBGrid, всё было прекрасно, но потребовались изменение: вот такую вот сортировку.... Остаётся только заменить DBGrid на простой грид, ручками в него выводить, и так во всех местах кода! (довольно корявого написанного) может, кто-нибудь, предложит другой вариант? Выводимые записи предназначены только для чтения, т.е. устроила бы небольшая процедура сортировки строк DBGrid, сразу после вывода. Но он доступа к строкам не даёт.... |
16.02.2009, 15:14 | #2 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
через какие компоненты выводите в дбгрид? тут можно запросом это делать. только не спрашивайте как. в любом справочнике по SQL такое описывается.
|
16.02.2009, 15:15 | #3 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
DBGrid - это компонент тупого отображения информации и ничего сортировать в принципе не умеет. Пишите свою программу, подцепляйтесь к этой базе и сортируйте хоть до посинения, но с помощью датасетов... Или работайте с датасетами в существующей программе. Проблема яйца выеденного не стоит, нужно просто понимать хотя бы азы... Последний раз редактировалось mihali4; 16.02.2009 в 15:17. |
|
16.02.2009, 15:37 | #4 | |||
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Цитата:
Цитата:
Цитата:
Dataset в программе - TOraQuery (используются компоненты оракла). Как перемещаться по датасету я вроде понял, например, чтение - Код:
А строки в нём как местами поменять? подскажите, плиз, или ткните носом в хорошую статью.... Последний раз редактировалось AnTe; 16.02.2009 в 15:42. |
|||
16.02.2009, 16:08 | #5 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
наверно невнимательно прочитали, либо я не догоняю, что вы хотите. почитейте про оператор LIKE еще раз. на край посмотрите тему "Для уменьшения количества вопросов..." в самом верху этого раздела, а там справочник по SQL.
Последний раз редактировалось фЁдОр; 16.02.2009 в 16:12. |
16.02.2009, 17:19 | #6 | |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Цитата:
Например, у меня есть БД Lovers с единственным полем - Names, и тремя записями: "Ваня-5-Маша" "Петя-2-Федя" "Клава-1-Боря" "Серёжа-3-Лена" Чтобы отсортировать по алфавиту я сделаю запрос: SELECT Names FROM Lovers ORDER BY Names ASC а если мне нужно получить сортировку по цифре в строке, между "-"и"-", чтобы получить следующее: "Клава-1-Боря" "Петя-2-Федя" "Серёжа-3-Лена" "Ваня-5-Маша" какой запрос нужно написать? |
|
16.02.2009, 17:38 | #7 |
только учусь!
Форумчанин
Регистрация: 08.02.2009
Сообщений: 124
|
Синтаксис функции SUBSTRING:
SUBSTRING( FROM [, FOR ]) Где: - имя колонки таблицы, из которой должна быть получена подстрока (substring). место в значении колонки, начиная с которого извлекается подстрока. длина извлекаемой подстроки. Функция SUBSTRING в примере ниже возвратит второй, третий и четвертый символы из колонки с именем COMPANY: SUBSTRING(COMPANY FROM 2 FOR 3) Функция SUBSTRING может быть использована и для списка полей в SELECT-запросе, где ключевое слово WHERE допускает сравнение значения с определенным набором колонок. Функция SUBSTRING может использоваться только с колонками типа String (на языке SQL тип CHAR). Вот пример функции SUBSTRING, использующей список колонок в SELECT-запросе (используем демонстрационную таблицу Paradox CUSTOMER.DB): Код:
«Я знаю, что ничего не знаю, но многие не знают и этого».
Последний раз редактировалось начинающий кодер; 16.02.2009 в 17:41. |
16.02.2009, 19:22 | #8 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Еще одно замечание, если позволите.
Физически создать базу данных - минутное дело. А вот тщательно продумать ее структуру (в том числе и структуру отдельных таблиц) - это требует времени. Приходится самому немножко поработать компьютером. Поэтому, если есть такая возможность - переделывайте структуру базы, ибо одно поле в таблице, в котором записано "Клава-1-Боря" - чистейший идиотизм. Почему? Да хотя бы потому, что этот "Боря" будет там повторен несметное количество раз - а это дикая избыточность и увеличение размера базы, что, в свою очередь, влечет за собой замедление операций с ней. Я уже не говорю об извращениях, которые придется применить для нужной вам сортировки... Последний раз редактировалось mihali4; 16.02.2009 в 19:34. |
17.02.2009, 04:03 | #9 |
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Спасибо, но даже если эта функция поддерживается сервером - она мне бесполезна, т.к. позиции "плавающие", как и в примере с "Ваня-5-Маша". Для отделения части, по которой необходимо произвести сортировку, строку нужно распарсить.
На паскале это делов на пять минут, а на SQL, по всей видимости, невозможно. |
17.02.2009, 04:09 | #10 | ||
Форумчанин
Регистрация: 25.09.2008
Сообщений: 209
|
Цитата:
Цитата:
Однако, что сделано - то сделано. Доступ к данным базе у меня только в RO, не говоря уж о её структуре. А вот извращение, которое возможно применить, для сортировки, по всей видимости одно - скидывать данные в массив, сортировать, и выводить вручную в StringGrid Учитывая то, как написан исходник уже готового просмотрщика - это будет полный абзац.... |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать сортировку (поиск) Delphi+Access | Toska | БД в Delphi | 6 | 28.08.2008 22:32 |
Как создать собственную ДЛЛ на Дельфи | SkyM@n | Помощь студентам | 5 | 02.12.2007 07:27 |
Как же мне это сделать? DBgrid | khaz | Компоненты Delphi | 4 | 12.02.2007 08:58 |