On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 1977
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 15:45. Заголовок: Сортировка по алфавиту ???


Всем привет.
Постановка задачи такая:
Есть справочник-улиц (street.dbf) типа:
Kstreet - Street
1 - Махалина ул.
2 - Федорова ул.
.....
990 - Алтуфьевское шоссе
.....

В основной базе "списка адресов" (допустим dogovor.dbf) записывается код улицы Kstreet.
При выборке из базы (использую условный индекс) выводиться нужный мне список.
Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц.

А как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов" ?
Чтобы список показывался по алфавиту ???



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]





Пост N: 354
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 15:53. Заголовок: Andrey пишет: Задаю..


Andrey пишет:

 цитата:
Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц.

Индекс ведь по коду, а не по наименованию

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1979
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:02. Заголовок: AlexMyr пишет: Инде..


AlexMyr пишет:

 цитата:
Индекс ведь по коду, а не по наименованию



Вот именно. А коды не совпадают с (алфавитом) улиц. Пытался делать справочники улиц заранее, но по всем городам не смог.
Для печати приходиться делать отдельную базу и выводить туда наименование улиц.
Сортировка тогда правильная.

Может кто решил данную проблему ?
Поделитесь идеей....


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2220
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:02. Заголовок: В dogovor сделать re..


В dogovor сделать relation на street по kstreet
И создать временный индекс по street->Street

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 индексировать ? Условие сортировки какое ставить ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 355
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:07. Заголовок: И я о том же, нужен ..


И я о том же, нужен отдельный индекс по street и при выводе на екран переключаться на этот индекс.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 356
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:13. Заголовок: Ага, список выводитс..


Ага, список выводится из базы dogovor, где есть только kstreet, а из базы street берутся только наименования через relation, правильно понял?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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, иначе его использовать нельзя


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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()"

И дальше переключаю на этот индекс.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1983
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:29. Заголовок: Pasha пишет: В stre..


Pasha пишет:

 цитата:
В street должен быть управляющий индекс по kstreet, это для того, чтобы работал set relation.


Да это уже есть у меня.


 цитата:

А в dogovor сделать индекс по выражению street->Street


Не совсем понял....


 цитата:

Но надо иметь в виду, что этот индекс будет работать, только когда включен set relation, иначе его использовать нельзя


Да это уже есть у меня....


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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, как я написал

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 357
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:34. Заголовок: Andrey Подумал и сде..


Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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(НОМЕР_ПОДЪЕЗДА)"


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1984
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:38. Заголовок: AlexMyr, Pasha - СПА..


AlexMyr, Pasha - СПАСИБО БОЛЬШОЕ !!!
Буду пробовать...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2224
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:41. Заголовок: AlexMyr пишет: Andr..


AlexMyr пишет:

 цитата:
Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn



Я часто использую такой прием, в комбинации с переопределением навигационных блоков кода.
Но, боюсь, это будет слишком нетривиально, навигационные блоки у меня немаленькие.


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 05.01.12 17:31. Заголовок: Нужная сортировка также может быть получена применением собственных кодов улиц


Цитата:
Задаю сортировку по коду улицы (Kstreet).
Получаю отсортированный список не по алфавиту улиц.

Иногда в этом случае можно получить и сортировку по алфавиту

Если есть возможность применения собственных кодов улиц для связки со справочником,
то можно содержать ключи, задающие алфавитную сортировку наименований улиц,
число которых конечно (явно ограничено).
То есть значение ключа - это некий хэш от названия.
Ключа длиной 10 символов достаточно для обеспечения нужной сортировки
и уникальности ключа.


Спасибо: 0 
Цитата Ответить
постоянный участник


Пост 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" )
Паша, выше все написал.
Попробовал, все строится как надо.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1986
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.01.12 22:04. Заголовок: Vlad04 пишет: Паша,..


Vlad04 пишет:

 цитата:
Паша, выше все написал.
Попробовал, все строится как надо.



Спасибо. Я тоже уже попробовал.
Все классно получается. Чуть-чуть медленей показывается список.
А так все здорово.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1058
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 07.01.12 17:39. Заголовок: Предложение WHILE н..


Предложение WHILE не сохраняется в индексном файле

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 267
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет