Форум » [x]Harbour » Сортировка по алфавиту ??? » Ответить

Сортировка по алфавиту ???

Andrey: Всем привет. Постановка задачи такая: Есть справочник-улиц (street.dbf) типа: Kstreet - Street 1 - Махалина ул. 2 - Федорова ул. ..... 990 - Алтуфьевское шоссе ..... В основной базе "списка адресов" (допустим dogovor.dbf) записывается код улицы Kstreet. При выборке из базы (использую условный индекс) выводиться нужный мне список. Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц. А как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов" ? Чтобы список показывался по алфавиту ???

Ответов - 57, стр: 1 2 3 All

Vlad04: Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается

Dima: Vlad04 пишет: Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается У меня Far не упал , а поле обычное "C" длина только 500 байт

Andrey: Vlad04 пишет: Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается Пользуйся для Харбора viewer'ом - dbedit ! В базу ПЕРВЫМ полем добавить: [pre2]AADD( aDbf , {"ID2" ,"+", 8,0 } )[/pre2] То любой просмоторщик "сдохнет".

Pasha: Вот пример - https://cloud.mail.ru/public/LrPi/piq8pzAWS Создание индекса делать в util_Use.prg строка 32 Данный пример несамодостаточен, а разбирать десятки килобайт чужого кода, чтобы найти там крупицу необходимого, желания нет. Делаем самодостаточный пример с использованием файлов dbf, созданных программой: proc main use test_street new index on kstreet to test_street use test_main new set relation to kstreet into test_street index on test_street->street to test_main browse() retu Запускаем. Видно, что сортировка получается, как заказывали. Замена tbrowse на tsbrowse из hmg испортить результат не может, поскольку и для первого, и во второго источник данных будет один и тот же, и колонки формируются по одному принципу: вызов нужного блока кода.

Andrey: Pasha пишет: Замена tbrowse на tsbrowse из hmg испортить результат не может, поскольку и для первого, и во второго источник данных будет один и тот же, и колонки формируются по одному принципу: вызов нужного блока кода. Позволь не согласиться, результат будет разный. Там особенности показа ДВУХ Tsbrowse в МиниГуи. Можешь сам попробовать и убедиться в этом. Нужно в примере рас комментировать строки: [pre2] //SET RELATION TO KSTREET INTO STREET //cKey := "UPPER(STREET->STREET)" [/pre2] и заменить строку: [pre2] DATA {|| Say_Dbf((cAlias)->KSTREET, "STREET", "STREET", 1 ) } ; // Form_SelDbf.prg на //DATA {|| STREET->STREET } ; // если подключено SET RELATION TO KSTREET INTO STREET в util_Use.prg[/pre2] и пере собрать проект. Если не использовать SET RELATION то показ ДВУХ Tsbrowse - отличный !!! Я пробовал при вызове второго Tsbrowse отключать SET RELATION, но это не помогло. На маленьких примерах в МиниГуи всё проходить отлично, но когда делаешь большие программы, то иногда получаешь совсем не тот результат. Но это скорее всего дело НЕ в МиниГуи, а в незнании/не понимании - как нужно правильно программировать в МиниГуи. Из-за этого и начал я делать большие примеры на МиниГуи, чтобы показать новичкам (да и себе тоже) как НУЖНО делать.

Andrey: Вот что Haz предложил: cKey := "KEY2NAME(KSTREET)" INDEX ON &cKey TO ( PATH_SYS + "test_main6.cdx" ) ADDITIVE DbSetOrder(6) // индекс основной базы по алфавиту справочника ....... Func KEY2NAME(c) STREET->(DBSEEK(c, .F.) ) RETURN STREET->STREET Спасибо ! Кому интересно, вот последний проект - https://cloud.mail.ru/public/BKCu/XGvekDSfe

Dima: Pasha пишет: Запускаем. Видно, что сортировка получается, как заказывали. Паш в терминале так и есть а вот в Минигуи нет , если еще и два бровса , как с этим обстоят дела в FW не знаю.

Pasha: Чтобы не копаться в этих сырцах, можно рассказать в двух словах ? Как я понял, в одном окне живут два бровса. Для первого источник данных - это test_main, и он должен быть отсортирован по test_street->street. А что во втором бровсе, какой у него источник данных ?

Andrey: Pasha пишет: Как я понял, в одном окне живут два бровса. Для первого источник данных - это test_main, и он должен быть отсортирован по test_street->street. А что во втором бровсе, какой у него источник данных ? Не так ! Открывается основная таблица в Tsbrowse. Источник test_main.dbf В этой таблице есть колонка "List of streets" (поле KSTREET) при редактировании вызывается второй Tsbrowse (источник test_street.dbf - уже открытая область базы STREET). Если делать с SET RELATION TO KSTREET INTO STREET, то 1-я запись во втором Tsbrowse "перескакивает" в первый Tsbrowse. Почему - непонятно. Я долго с этим бился. Помогает: 1) пере открытие справочника STREET 2) отказ от SET RELATION

Pasha: Еще раз уточним проблему. При клике на колонку выскакивает модальное окно со 2-м бровсом по test_street, и... ? Неправильно перерисовывается 1-е окно, если 2-е ездит по нему ? Или неправильно перерисовывается 1-е окно после закрытия 2-го ? И еще (дополню). Во 2-м бровсе по test_street часом не изменяется текущий индекс ?

Andrey: Pasha пишет: Еще раз уточним проблему. При клике на колонку выскакивает модальное окно со 2-м бровсом по test_street Да ! Pasha пишет: Неправильно перерисовывается 1-е окно, если 2-е ездит по нему ? Да !

Pasha: Когда 2-й бровс катается по 1-му, в 1-м меняется порядок строк, или неправильно отображается колонка "List of streets" ?

Pasha: Вот что Haz предложил: Так этот вариант работает ? Может я зря копаюсь, и вопрос исчерпан ?

SergKis: Andrey Ты не внимательно читаешь тему (или НЕ). Pasha ишет Отправлено: 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(НОМЕР_ПОДЪЕЗДА)"

Vlad04: Типичная ситуация. При открытии второго окна с улицами отменяется SET RELATION, индекс улиц переводится - по ИМЕНИ, после выбора улицы или отказа индекс переводится по коду, восстанавливается SET RELATION.

Dima: Vlad04 пишет: При открытии второго окна с улицами отменяется SET RELATION, индекс улиц переводится - по ИМЕНИ, после выбора улицы или отказа индекс переводится по коду, восстанавливается SET RELATION. Обрати внимание что при этом происходит в первом окне , заскринь его до и после вызова окна два и найди отличия. Мне пришлось для показа окна два , повторно открывать базу улиц с другим Alias (это я условно , задача у меня совсем другая)

Andrey: Pasha пишет: Так этот вариант работает ? Может я зря копаюсь, и вопрос исчерпан ? Да ! Вопрос исчерпан. Просто Haz предложил чуть раньше. Я и сделал его вариант. SergKis пишет: Ты не внимательно читаешь тему (или НЕ). Pasha ишет Да не понял я. Посчитал что Pasha уточняет что происходит с Tsbrowse. Andrey пишет: Кому интересно, вот последний РАБОЧИЙ проект - https://cloud.mail.ru/public/BKCu/XGvekDSfe



полная версия страницы