Btrieve и регистронезависимый поиск
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Заметил такую штуку. Если в программе не задавать LOCALE с CLACOLSEQ, то сортировка в ключе по строковому полю с NOCASE регистронезависимая только для латиницы. Если задаем LOCALE с CLACOLSEQ, то получается зависимость от регистра. То есть NOCASE игнорируется. Получается, что на драйвере Btrieve не получается реализовать регистронезависимый поиск для кириллицы, как в tps, или я что-то не знаю?
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Наверно, надо уточнить. Смотрю на pervasiveSQL 10, формат 9.5.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
Btrieve и регистронезависимый поиск
Здесь 2 момента …
1. Что такое "регистронезависимый поиск" ? Речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам ?
2. BTRIEVE действительно создаёт ключи без учёта CLACOLSEQ. Наверно, это верно для любой БД c поддержкой на стороне сервера.
Если посмотреть заголовок TPS файла, то в нём прописан CLACOLSEQ на момент создания файла. В MKD такого нет, используется
последовательность ANSI без поддержки национальных кодовых страниц.
1. Что такое "регистронезависимый поиск" ? Речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам ?
2. BTRIEVE действительно создаёт ключи без учёта CLACOLSEQ. Наверно, это верно для любой БД c поддержкой на стороне сервера.
Если посмотреть заголовок TPS файла, то в нём прописан CLACOLSEQ на момент создания файла. В MKD такого нет, используется
последовательность ANSI без поддержки национальных кодовых страниц.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Да, речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам. Аналогично и порядок следования записей в броузе по этому ключу.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Как я понял, CLACOLSEQ все же используется. Если ставить в ней разные значения, то разным будет и следование записей в ключе. Но при ее использовании не работает NOCASE.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
В help есть такая фраза:
Btrieve supports an alternate collating sequence. However, NLM 6 does not support both NOCASE and an alternate collating sequence. If you specify both, the NOCASE attribute takes precedence. No error is returned fromThe SEND function.
Btrieve supports an alternate collating sequence. However, NLM 6 does not support both NOCASE and an alternate collating sequence. If you specify both, the NOCASE attribute takes precedence. No error is returned fromThe SEND function.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
Btrieve и регистронезависимый поиск
Ну да. LOCATOR работает по ключу, а ключ BTRIEVE не будет регистронезависимым.
Наверно это всё связано с поддержкой UNICODE (точнее её отсутствием), ведь БД может быть интернациональной.
Видимо в данном случае нужно делать именно регистронезависимый контекстный поиск (FILTER),
что-то вроде: Match(Tovar:Name,Loc:FindString,17)
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Отсутствие NOCASE в локаторе пережить можно. Тут больше вопрос совместимости решения на btrieve с решением на tps. В tps я особо не парюсь, делаю в справочниках так называемый мач-код простым over на поле с наименованием. Наименование может быть длинным, а мач-код короткий, по первым символам наименования. Ключ и локатор строятся по мач-коду. В btrieve в этом случае получаем некрасивую картинку, как на скриншоте. В этом случае надо делать не over, а обычное поле, в которое писать значение lower(name)...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
Btrieve и регистронезависимый поиск
В данном случае, есть смысл привести списки приложений с разными структурами БД к общему виду.
Например, задав Locale('CLACOLSEQ','WINDOWS')
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Оно так и есть, только CLACOLSEQ явный. Но не решает проблему с отсутствием NOCASE. Если мач-код переводить в отдельное поле, то таких таблиц 60+. И вместо элегантного решения с OVER на tps получаем не очень красиво дополнительные поля в таблицах, которые надо не забывать заполнить, и поиск только по строчным буквам...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
Btrieve и регистронезависимый поиск
Можно точно утверждать 2 вещи:
1. Регистронезависимые ключи в списках для MKD нельзя получить также просто, как для TPS.
2. Здесь надо копать установку параметра /LACS=country_ID,code_page для драйвера Btrieve.
Как я понимаю, именно она отвечает за последовательность сортировки символов в ключах.
1. Регистронезависимые ключи в списках для MKD нельзя получить также просто, как для TPS.
2. Здесь надо копать установку параметра /LACS=country_ID,code_page для драйвера Btrieve.
Как я понимаю, именно она отвечает за последовательность сортировки символов в ключах.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
LACS я проверял. Ноль эмоций, когда через send и ошибка файловой системы, если включить в декларации таблицы.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7398
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
Btrieve и регистронезависимый поиск
А Вы пробовали создавать новый MKD файл с установленными параметрами /LACS=country_ID,code_page ?
Там ещё надо посмотреть, в справке к Actian Database как-то путанно про значения этих кодов.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4646
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Btrieve и регистронезависимый поиск
Конечно, создавал новый. Судя по доке, последовательность символов для сортировки в ключах сохраняется в mkd файле при его создании.
C6/C11, ШВС, tps/btrieve.