Btrieve и регистронезависимый поиск

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Заметил такую штуку. Если в программе не задавать LOCALE с CLACOLSEQ, то сортировка в ключе по строковому полю с NOCASE регистронезависимая только для латиницы. Если задаем LOCALE с CLACOLSEQ, то получается зависимость от регистра. То есть NOCASE игнорируется. Получается, что на драйвере Btrieve не получается реализовать регистронезависимый поиск для кириллицы, как в tps, или я что-то не знаю?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Наверно, надо уточнить. Смотрю на pervasiveSQL 10, формат 9.5.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Btrieve и регистронезависимый поиск

Сообщение Игорь Столяров »

Здесь 2 момента …

1. Что такое "регистронезависимый поиск" ? Речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам ?

2. BTRIEVE действительно создаёт ключи без учёта CLACOLSEQ. Наверно, это верно для любой БД c поддержкой на стороне сервера.
Если посмотреть заголовок TPS файла, то в нём прописан CLACOLSEQ на момент создания файла. В MKD такого нет, используется
последовательность ANSI без поддержки национальных кодовых страниц.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Да, речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам. Аналогично и порядок следования записей в броузе по этому ключу.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Как я понял, CLACOLSEQ все же используется. Если ставить в ней разные значения, то разным будет и следование записей в ключе. Но при ее использовании не работает NOCASE.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

В 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.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Btrieve и регистронезависимый поиск

Сообщение Игорь Столяров »

finsoftrz писал(а): 11 Май 2019, 10:26Аналогично и порядок следования записей в броузе по этому ключу.
Ну да. LOCATOR работает по ключу, а ключ BTRIEVE не будет регистронезависимым.
Наверно это всё связано с поддержкой UNICODE (точнее её отсутствием), ведь БД может быть интернациональной.
Видимо в данном случае нужно делать именно регистронезависимый контекстный поиск (FILTER),
что-то вроде: Match(Tovar:Name,Loc:FindString,17)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Отсутствие NOCASE в локаторе пережить можно. Тут больше вопрос совместимости решения на btrieve с решением на tps. В tps я особо не парюсь, делаю в справочниках так называемый мач-код простым over на поле с наименованием. Наименование может быть длинным, а мач-код короткий, по первым символам наименования. Ключ и локатор строятся по мач-коду. В btrieve в этом случае получаем некрасивую картинку, как на скриншоте. В этом случае надо делать не over, а обычное поле, в которое писать значение lower(name)...
btrw.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Btrieve и регистронезависимый поиск

Сообщение Игорь Столяров »

finsoftrz писал(а): 11 Май 2019, 11:22Тут больше вопрос совместимости решения на btrieve с решением на tps
В данном случае, есть смысл привести списки приложений с разными структурами БД к общему виду.
Например, задав Locale('CLACOLSEQ','WINDOWS')
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Оно так и есть, только CLACOLSEQ явный. Но не решает проблему с отсутствием NOCASE. Если мач-код переводить в отдельное поле, то таких таблиц 60+. И вместо элегантного решения с OVER на tps получаем не очень красиво дополнительные поля в таблицах, которые надо не забывать заполнить, и поиск только по строчным буквам...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Btrieve и регистронезависимый поиск

Сообщение Игорь Столяров »

Можно точно утверждать 2 вещи:

1. Регистронезависимые ключи в списках для MKD нельзя получить также просто, как для TPS.

2. Здесь надо копать установку параметра /LACS=country_ID,code_page для драйвера Btrieve.
Как я понимаю, именно она отвечает за последовательность сортировки символов в ключах.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

LACS я проверял. Ноль эмоций, когда через send и ошибка файловой системы, если включить в декларации таблицы.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Btrieve и регистронезависимый поиск

Сообщение Игорь Столяров »

finsoftrz писал(а): 11 Май 2019, 12:57если включить в декларации таблицы
А Вы пробовали создавать новый MKD файл с установленными параметрами /LACS=country_ID,code_page ?
Там ещё надо посмотреть, в справке к Actian Database как-то путанно про значения этих кодов.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Btrieve и регистронезависимый поиск

Сообщение finsoftrz »

Конечно, создавал новый. Судя по доке, последовательность символов для сортировки в ключах сохраняется в mkd файле при его создании.
C6/C11, ШВС, tps/btrieve.
Ответить