Форум: "Базы";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
ВнизСнова о сортировке строк, как чисел. Найти похожие ветки
← →
Z-Yuri (2002-12-11 21:35) [0]Пару месяцев назад я задавал вопрос о сортировке по полю с данными типа "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 в частности?
← →
Johnmen (2002-12-12 00:12) [1]INSERT с параметрами.
← →
KSergey (2002-12-12 09:19) [2]Не думаю, что способ хорош, я в свое время сделал так: завел поле числовое, при добавлении новых строк в него пишется NULL. При старте программы делается запрос "все поля, где это поле NULL" и, если выборка не пуста (т.е. что-то добавили), пробегаю в цикле и вычисляю это поле.
Но тут, конечно, были свои предпосылки:
а) записи добавляются не часто и небольшими партиями;
б) плюс/минус 5 сек при старте программы (раз в день, по идее) в моем случае считаю несущественными;
в) главное: не требуется немедленной сортировки по добавленным записям. Как правило, сегодня добавляют, а на только завтра необходимы списки.
← →
Alexandr (2002-12-12 09:20) [3]использовать норамльный сервер БД
← →
Z-Yuri (2002-12-12 19:13) [4]Johnmen ©
Я имел ввиду insert into table1 select...
KSergey ©
А зачем при загрузке если тоже самое можно делать сразу после
insert. Я попробую именно так, в моем случае требуется немедленная сортировка
Alexandr ©
Хотелось бы, но не дают :)
← →
MsGuns (2002-12-12 19:54) [5]Уж не о нумерации ли документов (накладных, например) речь ?
Я в таких случаях просто тупо добавляю в таблицу поле 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аб
то в том же событии дополняю слева пробелами до определенного формата.
← →
BlackTiger (2002-12-12 20:44) [6]2MsGuns: вот и я предлагал ему в прошлый раз то же самое. Чем плохо? Хмммм... Правда вот, если длина поля 200 знаков, то получится несколько кривовато, а на 10-20 знаках - нормально.
Просто выравнивай значение по правому краю, добивая слева пробелами. Если бы были триггера, то все было бы намного проще - поле-дубликат, которое заполняется в триггере, и сортировка по нему, а не по оригиналу. А тут Парадокс...
Ни одна база сама тебе так не отсортирует. Я видел только одну базу на своем веку, которая так сортировала, но это была СВОЯ нестандартная база со своими наворотами (native база Navision Financials/Attain). При этом она утрачивала эту способность при переносе на MSSQL.
← →
Z-Yuri (2002-12-14 12:47) [7]
> MsGuns © (12.12.02 19:54)
> Для ввода же нового документа даю 2 отдельных контрола
В том то и дело, что первый раз я предложил 2 едита а юзеры и ихнее начальство уперлись: "Хотим в одной строке писать что угодно, но сортировало чтоб правильно". :)). Ну а мне извращаться было облом.
> Если бы были триггера,
Событие BeforeXXXX плюс пробежки по таблицам после Insert и других подобных запросов - получаем кривой аналог триггера. :)
ЗЫ.
Наркоман попал в ад после смерти.
Видит большое поле конопли и чувака, который набивает косяк.
- Чувак, а мне можно косяк.
- Бери.
- А спички дай.
- Если бы были спички, то это был бы рай!
← →
Reindeer Moss Eater (2002-12-14 13:05) [8]Select cast(<строковое_поле> as Integer), A.*
From TableName A
Order by 1
Дело в том, что Local SQl преобразует в цифру без генерации исключения строки даже такого вида "1, 1А, 2, 3, 3А, 10, 11...".
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c