Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1977
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 15:45. Заголовок: Сортировка по алфавиту ???
Всем привет. Постановка задачи такая: Есть справочник-улиц (street.dbf) типа: Kstreet - Street 1 - Махалина ул. 2 - Федорова ул. ..... 990 - Алтуфьевское шоссе ..... В основной базе "списка адресов" (допустим dogovor.dbf) записывается код улицы Kstreet. При выборке из базы (использую условный индекс) выводиться нужный мне список. Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц. А как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов" ? Чтобы список показывался по алфавиту ???
|
|
|
Ответов - 57
, стр:
1
2
3
All
[только новые]
|
|
|
| |
Пост N: 354
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.01.12 15:53. Заголовок: Andrey пишет: Задаю..
Andrey пишет: цитата: | Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц. |
|
Индекс ведь по коду, а не по наименованию
|
|
|
|
| постоянный участник
|
Пост N: 1979
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 16:02. Заголовок: AlexMyr пишет: Инде..
AlexMyr пишет: цитата: | Индекс ведь по коду, а не по наименованию |
| Вот именно. А коды не совпадают с (алфавитом) улиц. Пытался делать справочники улиц заранее, но по всем городам не смог. Для печати приходиться делать отдельную базу и выводить туда наименование улиц. Сортировка тогда правильная. Может кто решил данную проблему ? Поделитесь идеей....
|
|
|
|
| Администратор
|
Пост N: 2220
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.01.12 16:02. Заголовок: В dogovor сделать re..
В dogovor сделать relation на street по kstreet И создать временный индекс по street->Street
|
|
|
|
| постоянный участник
|
Пост N: 1980
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 16:06. Заголовок: Pasha пишет: В dogo..
Pasha пишет: цитата: | В dogovor сделать relation на street по kstreet |
| Это уже есть давно.... Pasha пишет: цитата: | И создать временный индекс по street->Street |
| Это тоже есть.... Я про бд-улиц (use street ; index on UPPER(street) to.... ), этот индекс у меня постоянный. Как базу dogovor.dbf индексировать ? Условие сортировки какое ставить ?
|
|
|
|
| |
Пост N: 355
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.01.12 16:07. Заголовок: И я о том же, нужен ..
И я о том же, нужен отдельный индекс по street и при выводе на екран переключаться на этот индекс.
|
|
|
|
| |
Пост N: 356
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.01.12 16:13. Заголовок: Ага, список выводитс..
Ага, список выводится из базы dogovor, где есть только kstreet, а из базы street берутся только наименования через relation, правильно понял?
|
|
|
|
| Администратор
|
Пост N: 2221
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.01.12 16:22. Заголовок: Andrey пишет: Это т..
Andrey пишет: цитата: | Это тоже есть.... Я про бд-улиц (use street ; index on UPPER(street) to.... ), этот индекс у меня постоянный. Как базу dogovor.dbf индексировать ? Условие сортировки какое ставить ? |
| В street должен быть управляющий индекс по kstreet, это для того, чтобы работал set relation. А в dogovor сделать индекс по выражению street->Street Но надо иметь в виду, что этот индекс будет работать, только когда включен set relation, иначе его использовать нельзя
|
|
|
|
| постоянный участник
|
Пост N: 1982
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 16:25. Заголовок: AlexMyr пишет: И я ..
AlexMyr пишет: цитата: | И я о том же, нужен отдельный индекс по street и при выводе на екран переключаться на этот индекс. |
| Я не понимаю как переключаться ? Использую условную индексацию: INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ; EVAL SAY_PROCENT() ; EVERY nKolRecords / 10 WHILE &cFilterTo ADDITIVE cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)" cFilterTo := "Kcity=350.AND.!DELETED()" И дальше переключаю на этот индекс.
|
|
|
|
| постоянный участник
|
Пост N: 1983
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 16:29. Заголовок: Pasha пишет: В stre..
Pasha пишет: цитата: | В street должен быть управляющий индекс по kstreet, это для того, чтобы работал set relation. |
| Да это уже есть у меня. цитата: | А в dogovor сделать индекс по выражению street->Street |
| Не совсем понял.... цитата: | Но надо иметь в виду, что этот индекс будет работать, только когда включен set relation, иначе его использовать нельзя |
| Да это уже есть у меня....
|
|
|
|
| Администратор
|
Пост N: 2222
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.01.12 16:33. Заголовок: Andrey пишет: cInde..
Andrey пишет: цитата: | cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)" |
| Вместо KSTREET поставить STREET->STREET и сделать set relation, как я написал
|
|
|
|
| |
Пост N: 357
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.01.12 16:34. Заголовок: Andrey Подумал и сде..
Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn
|
|
|
|
|
| Администратор
|
Пост N: 2223
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.01.12 16:37. Заголовок: или не заморачиватьс..
или не заморачиваться с релэйшн, а написать функцию func StreetName if dogovor->KStreet != street->KStreet street->(dbSeek(dogovor->KStreet)) endif Return street->Street и использовать выражение "STR(KCITY)+StreetName()+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"
|
|
|
|
| постоянный участник
|
Пост N: 1984
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.01.12 16:38. Заголовок: AlexMyr, Pasha - СПА..
AlexMyr, Pasha - СПАСИБО БОЛЬШОЕ !!! Буду пробовать...
|
|
|
|
| Администратор
|
Пост N: 2224
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.01.12 16:41. Заголовок: AlexMyr пишет: Andr..
AlexMyr пишет: цитата: | Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn |
| Я часто использую такой прием, в комбинации с переопределением навигационных блоков кода. Но, боюсь, это будет слишком нетривиально, навигационные блоки у меня немаленькие.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 05.01.12 17:31. Заголовок: Нужная сортировка также может быть получена применением собственных кодов улиц
Цитата: Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц. Иногда в этом случае можно получить и сортировку по алфавиту Если есть возможность применения собственных кодов улиц для связки со справочником, то можно содержать ключи, задающие алфавитную сортировку наименований улиц, число которых конечно (явно ограничено). То есть значение ключа - это некий хэш от названия. Ключа длиной 10 символов достаточно для обеспечения нужной сортировки и уникальности ключа.
|
|
|
|
| постоянный участник
|
Пост N: 283
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.01.12 19:19. Заголовок: Андрей, ты же любите..
Андрей, ты же любитель условной индексации. А с ней просто получается. Создаем временный индекс В базе перед созданием индекса должно быть установлена связь бызы договоров с улицами по коду улиц. Dbsetorder(0) go top IndexTo := "street->STREET+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)" cFilterTo := "Kcity=350.AND.!DELETED()" ORDSETFOCUS( "ONE" ) Паша, выше все написал. Попробовал, все строится как надо.
|
|
|
|
| постоянный участник
|
Пост N: 1986
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.01.12 22:04. Заголовок: Vlad04 пишет: Паша,..
Vlad04 пишет: цитата: | Паша, выше все написал. Попробовал, все строится как надо. |
| Спасибо. Я тоже уже попробовал. Все классно получается. Чуть-чуть медленей показывается список. А так все здорово.
|
|
|
|
| постоянный участник
|
Пост N: 1987
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.01.12 16:29. Заголовок: А как получить "..
А как получить "УСЛОВИЕ ОТБОРА" - FOR из индекса ? Использую условную индексацию: SELECT MYDBF INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ; EVAL SAY_PROCENT() ; EVERY nKolRecords / 10 FOR &cFilterTo ADDITIVE cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)" cFilterTo := "Kcity=350.AND.!DELETED()" ....... код программы ....... SELECT MYDBF cIndexTo := DBORDERINFO(DBOI_EXPRESSION) ? cIndexTo cFilterTo := ???? Мне нужно получить значение cFilterTo
|
|
|
|
| постоянный участник
|
Пост N: 1988
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.01.12 16:56. Заголовок: Нашел.... DBORDERI..
Нашел.... DBORDERINFO(DBOI_CONDITION) ! А как для случая - WHILE ? INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ; EVAL SAY_PROCENT() ; EVERY nKolRecords / 10 WHILE &cFilterTo ADDITIVE Мне нужно получить значение cFilterTo
|
|
|
|
| постоянный участник
|
Пост N: 1058
Зарегистрирован: 09.10.06
|
|
Отправлено: 07.01.12 17:39. Заголовок: Предложение WHILE н..
Предложение WHILE не сохраняется в индексном файле
|
|
|
Ответов - 57
, стр:
1
2
3
All
[только новые]
|
|