Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.01
2
2/13
2возврат
12
1201аб

или

1

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

Но уж если совсем надо красиво типа
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
1-15104
Dizertir
2002-12-22 18:37
2003.01.06
TreeView


14-15307
pavelsinicinv
2002-12-18 10:02
2003.01.06
Server


1-15055
vilfred
2002-12-24 14:37
2003.01.06
народ, лыжы уже не едут, как это сделать???


1-15071
perov
2002-12-24 11:29
2003.01.06
Редактор свойств


1-15050
Fury
2002-12-24 22:04
2003.01.06
Печать в Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский