Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Снова о сортировке строк, как чисел. [D5, Paradox]


Z-Yuri ©   (2002-12-11 21:35:00) 

Пару месяцев назад я задавал вопрос о сортировке по полю с данными типа "1, 1А, 2, 3, 3А, 10, 11...". При обсуждении оптимальный вариант не был найден и я оставил все как есть. Но сейчас проблема встала снова и я решил завести дополнительное числовое поле в которое автоматически писать перевод строки в число по принципу 1 - 100, 2 - 200, 10 - 1000, 2А - 201, 2Б - 202, 10А - 1001. (функцию написать несложно и прицепить к BeforePost тоже) и сортировать по этому полю.
Итог.
1. Проблема сортировки решается.
2. Нужно будет менять текст прибл. 20-ти запросов.
3. В программе есть запросы типа Insert а к ним то как прикрутить разработанную функцию?
У кого есть какие мысли вообще и по п.3 в частности?


Reindeer Moss Eater   (2002-12-14 13:05:00) [1]

Select cast(<строковое_поле> as Integer), A.*
From TableName A
Order by 1

Дело в том, что Local SQl преобразует в цифру без генерации исключения строки даже такого вида "1, 1А, 2, 3, 3А, 10, 11...".


Z-Yuri   (2002-12-14 12:47:00) [2]


> MsGuns © (12.12.02 19:54)


> Для ввода же нового документа даю 2 отдельных контрола

В том то и дело, что первый раз я предложил 2 едита а юзеры и ихнее начальство уперлись: "Хотим в одной строке писать что угодно, но сортировало чтоб правильно". :)). Ну а мне извращаться было облом.


> Если бы были триггера,

Событие BeforeXXXX плюс пробежки по таблицам после Insert и других подобных запросов - получаем кривой аналог триггера. :)
ЗЫ.
Наркоман попал в ад после смерти.
Видит большое поле конопли и чувака, который набивает косяк.
- Чувак, а мне можно косяк.
- Бери.
- А спички дай.
- Если бы были спички, то это был бы рай!


BlackTiger   (2002-12-12 20:44:00) [3]

2MsGuns: вот и я предлагал ему в прошлый раз то же самое. Чем плохо? Хмммм... Правда вот, если длина поля 200 знаков, то получится несколько кривовато, а на 10-20 знаках - нормально.
Просто выравнивай значение по правому краю, добивая слева пробелами. Если бы были триггера, то все было бы намного проще - поле-дубликат, которое заполняется в триггере, и сортировка по нему, а не по оригиналу. А тут Парадокс...

Ни одна база сама тебе так не отсортирует. Я видел только одну базу на своем веку, которая так сортировала, но это была СВОЯ нестандартная база со своими наворотами (native база Navision Financials/Attain). При этом она утрачивала эту способность при переносе на MSSQL.


MsGuns   (2002-12-12 19:54:00) [4]

Уж не о нумерации ли документов (накладных, например) речь ?
Я в таких случаях просто тупо добавляю в таблицу поле CHARACTER(10), оставляя поле нумерации целым числовым.
Далее все просто до безобразия:
- В событии OnGetText поля № пишу

Text := Table1.FieldByName("Number").AsString+
Table1.FieldByName("NumberPrfx").AsString;

- В гриды просто не помещаю колонку с полем NumberPrfx

Для ввода же нового документа даю 2 отдельных контрола

В результате получаю

1
1а
1.01
2
2/13
2возврат
12
1201аб

или

1
1а
1.01
2
2/13
2возврат
12
1201аб

Но уж если совсем надо красиво типа
1
1а
1.01
2/13
2возврат
12
1201аб

то в том же событии дополняю слева пробелами до определенного формата.


Z-Yuri   (2002-12-12 19:13:00) [5]

Johnmen ©
Я имел ввиду insert into table1 select...
KSergey ©
А зачем при загрузке если тоже самое можно делать сразу после
insert. Я попробую именно так, в моем случае требуется немедленная сортировка
Alexandr ©
Хотелось бы, но не дают :)


Alexandr   (2002-12-12 09:20:00) [6]

использовать норамльный сервер БД


KSergey   (2002-12-12 09:19:00) [7]

Не думаю, что способ хорош, я в свое время сделал так: завел поле числовое, при добавлении новых строк в него пишется NULL. При старте программы делается запрос "все поля, где это поле NULL" и, если выборка не пуста (т.е. что-то добавили), пробегаю в цикле и вычисляю это поле.
Но тут, конечно, были свои предпосылки:
а) записи добавляются не часто и небольшими партиями;
б) плюс/минус 5 сек при стартепрограммы (раз в день, по идее) в моем случае считаю несущественными;
в) главное: не требуется немедленной сортировки по добавленным записям. Как правило, сегодня добавляют, а на только завтра необходимы списки.


Johnmen   (2002-12-12 00:12:00) [8]

INSERT с параметрами.


Наверх

Титульная страница Поиск, карта сайта Написать письмо