|
Не все сервера баз данных обеспечивают правильную работу с русскими буквами.
В большинстве случаев проблема сводится к довольно незначительным, но досадным ошибкам:
- Не работают функции Upper и Lower.
- Символы сортируются в порядке текущей кодовой страницы (WIN1251), т.е. «ЁёАБВ...Яабв...я»
Решить первую проблему очень легко, если сервер поддерживает функцию TRANSLATE.
Например, для PostgreSQL (имеется ввиду стандартная сборка из комплекта cygwin,
в то время как правильно собранный сервер и сам нормально работает с русскими кодировками)
это будет выглядеть примерно так:
CREATE FUNCTION "w_upper"("varchar")
RETURNS "varchar" AS '
SELECT TRANSLATE($1, ''abcdefghijklmnopqrstuvwxyzёабвгдежзийклмнопрстуфхцчшщъыьэюя'',
''ABCDEFGHIJKLMNOPQRSTUVWXYZЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'')
' LANGUAGE 'sql';
CREATE FUNCTION "w_lower"("varchar")
RETURNS "varchar" AS '
SELECT TRANSLATE($1, ''ABCDEFGHIJKLMNOPQRSTUVWXYZЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'',
''abcdefghijklmnopqrstuvwxyzёабвгдежзийклмнопрстуфхцчшщъыьэюя'')
' LANGUAGE 'sql';
Вторую задачу можно решить как минимум двумя способами, суть которых заключается
в том, чтобы не дать Access'у перестроить запрос к серверу и таким способом
заставить его включить свой собственный механизм сортировки.
- Необходимо создать запрос к серверу, который возвращал бы нужные записи.
Далее, на основе этого запроса создать обычный запрос, в котором указать
требуемый порядок сортировки. Разумеется, такой запрос будет необновляемым.
- Создать обычный запрос на основе присоединенной таблицы сервера, в котором
задать сортировку по выражению, например
«ORDER BY "" & MyTable.MyField».
Такой запрос будет обновляемым, если тому не препятствуют обычные ограничения.
|