Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Снова о сортировке строк, как чисел.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
7-15327
Slim99
2002-10-28 10:16
2003.01.06
Как определить скролл мыши


14-15274
DeMoN-777
2002-12-16 20:26
2003.01.06
Шарим ? Варим !


14-15225
herosofnn
2002-12-15 11:25
2003.01.06
Ораторская речь


3-14945
oleg_er
2002-12-14 11:31
2003.01.06
содержимое запроса в новую таблицу?


7-15323
Troll
2002-10-26 19:29
2003.01.06
АОН????