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

Clarion, Clarion 7

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

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

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

Сообщение finsoftrz » 11 Май 2019, 8:44

Заметил такую штуку. Если в программе не задавать LOCALE с CLACOLSEQ, то сортировка в ключе по строковому полю с NOCASE регистронезависимая только для латиницы. Если задаем LOCALE с CLACOLSEQ, то получается зависимость от регистра. То есть NOCASE игнорируется. Получается, что на драйвере Btrieve не получается реализовать регистронезависимый поиск для кириллицы, как в tps, или я что-то не знаю?
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 9:14

Наверно, надо уточнить. Смотрю на pervasiveSQL 10, формат 9.5.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 11 Май 2019, 10:23

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

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

2. BTRIEVE действительно создаёт ключи без учёта CLACOLSEQ. Наверно, это верно для любой БД c поддержкой на стороне сервера.
Если посмотреть заголовок TPS файла, то в нём прописан CLACOLSEQ на момент создания файла. В MKD такого нет, используется
последовательность ANSI без поддержки национальных кодовых страниц.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 10:26

Да, речь идёт о LOCATOR для позицирования засветки в BROWSE по первым символам. Аналогично и порядок следования записей в броузе по этому ключу.
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 10:29

Как я понял, CLACOLSEQ все же используется. Если ставить в ней разные значения, то разным будет и следование записей в ключе. Но при ее использовании не работает NOCASE.
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 10:34

В 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.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 11 Май 2019, 10:35

finsoftrz писал(а):
11 Май 2019, 10:26
Аналогично и порядок следования записей в броузе по этому ключу.
Ну да. LOCATOR работает по ключу, а ключ BTRIEVE не будет регистронезависимым.
Наверно это всё связано с поддержкой UNICODE (точнее её отсутствием), ведь БД может быть интернациональной.
Видимо в данном случае нужно делать именно регистронезависимый контекстный поиск (FILTER),
что-то вроде: Match(Tovar:Name,Loc:FindString,17)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 11:22

Отсутствие NOCASE в локаторе пережить можно. Тут больше вопрос совместимости решения на btrieve с решением на tps. В tps я особо не парюсь, делаю в справочниках так называемый мач-код простым over на поле с наименованием. Наименование может быть длинным, а мач-код короткий, по первым символам наименования. Ключ и локатор строятся по мач-коду. В btrieve в этом случае получаем некрасивую картинку, как на скриншоте. В этом случае надо делать не over, а обычное поле, в которое писать значение lower(name)...
btrw.jpg
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 11 Май 2019, 11:34

finsoftrz писал(а):
11 Май 2019, 11:22
Тут больше вопрос совместимости решения на btrieve с решением на tps
В данном случае, есть смысл привести списки приложений с разными структурами БД к общему виду.
Например, задав Locale('CLACOLSEQ','WINDOWS')
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 11:43

Оно так и есть, только CLACOLSEQ явный. Но не решает проблему с отсутствием NOCASE. Если мач-код переводить в отдельное поле, то таких таблиц 60+. И вместо элегантного решения с OVER на tps получаем не очень красиво дополнительные поля в таблицах, которые надо не забывать заполнить, и поиск только по строчным буквам...
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 11 Май 2019, 12:07

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

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

2. Здесь надо копать установку параметра /LACS=country_ID,code_page для драйвера Btrieve.
Как я понимаю, именно она отвечает за последовательность сортировки символов в ключах.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 12:57

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4109
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 11 Май 2019, 13:53

finsoftrz писал(а):
11 Май 2019, 12:57
если включить в декларации таблицы
А Вы пробовали создавать новый MKD файл с установленными параметрами /LACS=country_ID,code_page ?
Там ещё надо посмотреть, в справке к Actian Database как-то путанно про значения этих кодов.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1265
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 11 Май 2019, 14:23

Конечно, создавал новый. Судя по доке, последовательность символов для сортировки в ключах сохраняется в mkd файле при его создании.
Рязань решает.

Ответить