| Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
| Все форумы / Delphi | ![]() |
||
|
копосов нв
Guest |
Написана программа на Delphi делает запросы к Oracle, в ответ все русские буквы заменяются знаком вопроса. Проблема мне известна в переменной NLS_LANG (HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0) на клиенте Oracle значение CHARACTERSET не согласуется с CHARACTERSET БД на сервере Oracle. Программа установлена на сетевом ресурсе (файл-сервере) и запускается клиентами в локальной сети. Чтобы решить проблему с кодировкой можно на клиентах (из программы!) установить значение параметра NLS_LANG, например, в AMERICAN_AMERICA.CL8MSWIN1251, но реестр на редактирование закрыт для пользователей - соответственно вариант отлетает! Можно посылать на сервер, что вроде alter session set ..., но у некоторых юзеров нет на alter прав. Остаётся вариант на клиенте сделать установку параметра NLS_LANG при каждом сеансе. Вопрос как это сделать? |
| 20 сен 05, 12:08 [1893358] Ответить | Цитировать Сообщить модератору | |
|
Valeo Pupsus Member Откуда: Харьков Сообщений: 140 |
Нормальный вариант - послать админа настраивать людям клиентов, чтоб они работать могли, а не вопросики разглядывали. -- Best regards, Valeo Pupsus. Posted via ActualForum NNTP Server 1.3 |
| 20 сен 05, 12:23 [1893446] Ответить | Цитировать Сообщить модератору | |
|
копосов нв
Guest |
Вопрос - не людей гонять, а возможно ли программно для конктретного сеанса (внутри сессии) выставить нужное значение параметра NLS_LANG на клиенте. |
||
| 20 сен 05, 13:29 [1893995] Ответить | Цитировать Сообщить модератору | |||
|
Valeo Pupsus Member Откуда: Харьков Сообщений: 140 |
Если работу свою не делают, то надо гонять, а не костыли выдумывать.См.хелп: Setting NLS Parameters NLS parameters determine the locale-specific behavior on both the client and the server. There are four ways to specify NLS parameters: - As initialization parameters on the server. NLS_TERRITORY = "CZECH REPUBLIC" - As environment variables on the client. % setenv NLS_SORT FRENCH - As ALTER SESSION parameters. SQL> ALTER SESSION SET NLS_SORT = FRENCH; -As a SQL function parameter. TO_CHAR(hiredate, 'DD/MON/YYYY', 'nls_date_language = FRENCH') -- Best regards, Valeo Pupsus. Posted via ActualForum NNTP Server 1.3 |
| 20 сен 05, 13:40 [1894089] Ответить | Цитировать Сообщить модератору | |
|
копосов нв
Guest |
Всё же будет решение как задать схему кодирования символов (кодировку), используемую в клиентском приложении (кодировку терминала пользователя) на лету? |
| 20 сен 05, 13:53 [1894195] Ответить | Цитировать Сообщить модератору | |
|
Orus Member Откуда: Сообщений: 28 |
попробуй сделать процу от имени пользователя, имеющего соответсвующие права на alter session procedure SETNLS is begin execute immediate 'ALTER SESSION SET NLS_SORT = FRENCH' ; end; и дать права обычным юзерам на execute этой программы |
| 20 сен 05, 14:00 [1894237] Ответить | Цитировать Сообщить модератору | |
|
копосов нв
Guest |
Почему NLS_SORT? |
||
| 20 сен 05, 14:19 [1894377] Ответить | Цитировать Сообщить модератору | |||
|
копосов нв
Guest |
В начале я указал не правильно. Пользователь может изменять окружение сессии, т.е. alter session... . |
| 20 сен 05, 14:25 [1894439] Ответить | Цитировать Сообщить модератору | |
|
Leonid Kudryavtsev Member Откуда: Сообщений: 2213 |
Зачем реестр? Установить переменную окружения. Например можно сделать .BAT файл: SET NLS_LANG=AMERICAN_CIS.CL8MSWIN1251 MY_PROGRAM.EXE |
||
| 20 сен 05, 18:00 [1895731] Ответить | Цитировать Сообщить модератору | |||
|
Elic Member Откуда: 1984. Неким AI прозван 'быдлом'. Таки де-факто забанен Сообщений: 22762 |
Либо установить эту переменную окружения прямо из своей программы. RTFM SetEnvironmentVariable. |
| 20 сен 05, 18:09 [1895782] Ответить | Цитировать Сообщить модератору | |
|
zirex Member Откуда: Сообщений: 714 |
вы соединяетесь через OCI, а через NET не пробовали (ODAC это умеет)? NET не требует установленного ораклового клиента, т.о. кодировка устанавливается прямо в приложении. |
||
| 20 сен 05, 18:25 [1895863] Ответить | Цитировать Сообщить модератору | |||
|
Biz© Member Откуда: Snezhinsk Сообщений: 5689 |
а в ветке HKCU такую же структуру как и в HKLM создавать не пробовали ? при работе эта ветка накладывается сверху на HKLM и ессно замещает одинаковые ключики ... |
||
| 20 сен 05, 22:21 [1896187] Ответить | Цитировать Сообщить модератору | |||
|
копосов нв
Guest |
Через ADO! Provider=MSDAORA.1; |
||||
| 21 сен 05, 09:17 [1896588] Ответить | Цитировать Сообщить модератору | |||||
|
копосов нв
Guest |
Реестр трогать нельзя! |
||||
| 21 сен 05, 09:18 [1896591] Ответить | Цитировать Сообщить модератору | |||||
|
копосов нв
Guest |
на кнопку получения данных вешаю но ничего не выходит
Может делаю вызов не в том месте...? |
|||
| 21 сен 05, 09:20 [1896599] Ответить | Цитировать Сообщить модератору | ||||
|
копосов нв
Guest |
Попробывал так: создаю файл start_apl.cmd в нём:
и тогда всё катит! Собственно на сервере именно такой файл я писал для DBA:
Всё же можно ли тоже самой сделать в самом приложении? . . . УРА!!!!!!!!!!!!!!!!!!!! на создание формы писать надо было!!!! УРА!!!!!!!!!!!!!!!!!!!!
|
|||
| 21 сен 05, 09:39 [1896660] Ответить | Цитировать Сообщить модератору | ||||
|
Dmitry Arefiev Member Откуда: da-soft Сообщений: 8772 |
quot копосов нв]Может делаю вызов не в том месте...?[/quot] 1) Установка переменной среды должна происходить перед соединением с сервером. Хотя OCI позволяет устанавливать кодировку данных для отдельных колонок и параметров, начиная с 9.2. 2) Всем, кто советовал ALTER SESSION. OCI переводит часть NLS_LANG (AMERICAN_AMERICA) в длинную ALTER SESSION команду и часть (CL8MSWIN1251) в кодировку данных. Кодировка данных устанавливается для сессии не ALTER SESSION командой, а внутренним OCI вызывом. Так что ALTER SESSION в данном случае не причем. Удачи, Дмитрий -- AnyDAC (www.da-soft.com) - Oracle, MySQL, MSSQL, MSAccess, IBM DB2, Sybase ASA, DbExpress, ODBC freeware data access framework. |
| 21 сен 05, 10:33 [1896913] Ответить | Цитировать Сообщить модератору | |
|
andrey_anonymous Member Откуда: Москва Сообщений: 14777 |
Что касается методов решения - все вроде бы ясно (в т.ч. и недостатки Вашего - что будете делать, если, например, французы прикупят ваше изделие? =) Хочется внести ясность только в один вопрос - про "несогласованность значения CHARACTERSET на клиенте с CHARACTERSET БД на сервере Oracle". Для "согласованности" требуется только одно - возможность преобразования серверного чарсета в клиентский. В Вашем случае имеет место несогласованность между выбранной клиентской кодировкой и кодировкой шрифтов, которыми Вы отображаете информацию. Для примера - запуск оконной и консольной версий SQL*Plus (не секрет, что консольная "живет" в 866, оконная - в "1251"):
Сменим кодировку:
Зато работает консольная версия:
|
|||||||
| 21 сен 05, 21:59 [1899975] Ответить | Цитировать Сообщить модератору | ||||||||
|
копосов нв
Guest |
ок. согласен. |
| 22 сен 05, 12:01 [1901041] Ответить | Цитировать Сообщить модератору | |
| Все форумы / Delphi | ![]() |
|