Нужно попытаться до инициализации Oracle клиента
установить переменную окружения NLS_LANG при помощи вызова
SetEnvironmentVariable Win32 API.
Я думаю, что можно включить эту строчку в текст
файла проекта перед Application.Initialize;
Главное, это что бы разделы Initialization
ВСЕХ Units проекта не содержали кода, способного
инициализировать клиента Oracle, иначе вызов SetEnvironmentVariable
произойдет ПОСЛЕ инициализации - без нужного результата ессно.
Дмитрий.
WBR, Andrew
--
Andrew Zhilenko - Database Administrator
Telenor Internet
tel.+42-02-96159436 fax. +42-02-96159422
e-mail: and...@ti.cz http://i.am/manowar/
Vaclavske namesti 4 - Praha 1 - 110 00
Czech Republic
Я так понимаю (сам наступил на эти глабли и не знаю, что делать), что
требуется работать ОДHОВРЕМЕHHО с различными БД, имеющими разные NLS. Т.е.
нужно устанвливать NLS для каждой сессии, коих в приложении может быть
несколько. Вот как это сделать?
Я подозреваю, что для разных сессий в пределах одного процесса
это невозможно. Либо сессии надо разносить по разным процессам
и далее организовывать взаимодействие средствами IPC,
либо использовать во всех запросах функцию CONVERT, что
так же не просто.
Дмитрий.
BR,
Eugene
Заранее извиняюсь, может я не совсем въехал в существо проблемы,
но по-моему , менять кодировку языка на клиенте при работе с базами в разных
кодировках не требуется. Если правильно настроен клиент, то при коннекте к
базе
перекодировка будет происходить автоматически. т.е., если я имею 2 базы с
кодировками
кои8 и 866, а на клиенте 1251, то все должно работать Ob.
Поправьте, если ошибаюсь.
С уважением,
Игорь
Gonchar Roman пишет в сообщении <3743D40F...@mail.uaz.ru> ...
>Имеется программа на DELPHI,которая связывается с несколькими серверами
>с базами на ORACLE, таблицы в которых заполнены в разных кодировках.
>Подскажите пожалуйста как програмным путем(SQL) поменять параметр языка
>ORACLE
>NLS_LANG например c RUSSIAN_CIS.CL8MSWIN1251 на
>AMERICAN_AMERICA.US7ASCII.
>Система - WIN95, параметр NLS_LANG зашит в файле регистров.
>Спасибо за совет.
>
Тогда встречный вопрос - а правильно это как? Т.е. вот в твоем случае какой
NLS_LANG должен быть у клиента? Или еще что-то нужно настраивать?
В случае клиентской программы - согласен.
Но представим себе некий сервер приложений (банальный пример,
OWAS 3.0.0), к которому обращаются различные клиенты (win1251, 866,
koi8), которые не могут выбрать иную кодировку. Как поступить в этом
случае? Под каждый тип запускать отдельный экземпляр программы (www
listener), меняя переменные окружения, или самостоятельно все
перекодировать (стандартными?! средствами в OWAS?)?
Со всеми наилучшими пожеланиями,
Владимир Пасечник
Правильно - это когда с базой данных работают несколько клиентов с разными
кодировками,
а в базе все сохраняется в одной-единственной. Пример: У меня на станции
кодировка 1251, запускаю
виндовый sqlplus - пишу по-русски - в базе сохраняется в кои8. Запускаю
дос-сессию, ставлю nls_lang
RU8PC866, запускаю досовую сессию sqlplus - пишу по-русски - в базе
сохраняется в кои8. Потом могу читать это в виндовом плюсе. И так со всеми
остальными кодировками и клиентами.
С уважением,
Игорь
С этим я пока не разбирался, но, со временем, надеюсь, эта проблема решится.
Как один из вариантов - хранить все выводимые данные в базе, а в момент
считывания страницы определять тип броузера и на лету перекодировать вывод.
Но это грешит ошибками определения кодовой
страницы броузера.
С уважением,
Игорь
Для OWAS кодировка сессии задается в DAD-е. Т.е. если есть
клиенты с разными кодировками, то нужно завести несколько DAD-ов
с разными значениями NLS_LANG и прописать агенты на каждый из
них. Какого агента клиент укажет в той кодировке и будет отдавать
информацию сервер.
> Владимир Пасечник
SY
-- AOR
Для OAS 4.0.6 проверено - работает, а вот OWAS 3.0.0 (под NT
который), ну не берет NLS_CHARSET из DADа, и хоть ты тресни. Тянет
значение из регистров на момент запуска. А за отсутствием такового
показывает любимые "???", не обращая никакого внимания на DAD.
Я был "приятно" поражен увидев всю информацию в koi8 через DAD у
которого NLS_LANG c CL8MSWIN1251, поменяв в регистрах NT значение
NLS_LANG на CL8KOI8R.
Может это у него как атавизм осталось.
P.S. Выдержка из доки (информация из первых рук, так сказать):
-----------------------------------------------------------------
The PL/SQL cartridge supports all the NLS extensions supported by the
Oracle database. Versions of PL/SQL cartridge prior to Oracle Web
Application Server 3.0 supported only the NLS_LANGUAGE parameter.
This parameter was used by the cartridge to derive the NLS_LANGUAGE,
NLS_TERRITORY, and NLS_CHARSET parameters.
-----------------------------------------------------------------
|>
|> SY
|>
|>-- AOR
|>
WBR,
Владимир Пасечник