Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.01;
Скачать: CL | DM;

Вниз

Не читаются unicode данные   Найти похожие ветки 

 
gog ©   (2010-03-24 18:17) [0]

Господа посоветуйте что делать?
Использую Дельфи 2010. База Oracle. Текстовые данные хранятся в unicod-е в национальном языке.
Соединение через AdoConnection. Вот строка соединения:

Provider=MSDAORA.1;Password=***;User ID=***;Data Source=dbname;Extended Properties="Unicode=True"

(вместо *** и dbName прописаны реальные значения)

а вот фрагмент программы

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 S1: UnicodeString;
 ft: TFieldType;
begin
 Edit1.Text:= ADOConnection1.ConnectionString;
 with qryWork do begin
   Close;
   SQL.Clear;
   SQL.Add("SELECT Term");
   SQL.Add("  FROM MyTable");
   SQL.Add(" WHERE ...");
   Open;
   ft:= qryWork.FieldByName("Term").DataType;

   Edit2.Text:= IntToStr((Ord(ft)));
   s1:= FieldByName("Term").Value;
   Edit3.Text:= S1;
//    Edit3.Text:= FieldByName("Term").Value;
//    Edit3.Text:= Recordset.GetString(2, 1, #9, #13#0, "<NULL>");
 end;
end;

Получаю одни вопросителные знаки и DataType = ftString а не ftWideString


 
Игорь Шевченко ©   (2010-03-24 19:14) [1]

Тип поля в таблице и значение NLS_LANG в студию

D2010 прекрасно работает в с юникодом в Oracle через ADO

 object db: TADOConnection
   Connected = True
   ConnectionString =
     "Provider=OraOLEDB.Oracle.1;Password=***;Persist Security Info=Tr" +
     "ue;User ID=***;Data Source=***"
   Provider = "OraOLEDB.Oracle.1"
   Left = 16
   Top = 16
 end


 
gog ©   (2010-03-25 08:45) [2]

Г-н Игор Шевченко

Указал рекомендуемый Вами провайдер но получил сообщение
"Provider cannot be found. It may not be properly installed"

Поясните пожалуиста как он инстолируется и что значит "Тип поля в таблице и значение NLS_LANG в студию"


 
Правильный$Вася   (2010-03-25 13:01) [3]


> Указал рекомендуемый Вами провайдер но получил сообщение"Provider
> cannot be found. It may not be properly installed"

ставится с клиентом оракла

> что значит "Тип поля в таблице и значение NLS_LANG в студию"

это значит, что ты не указал здесь тип поля и значение сессионной переменной оракла, а без них дальше ничего не насоветуешь


 
gog ©   (2010-03-25 13:12) [4]


> это значит, что ты не указал здесь тип поля и значение сессионной
> переменной оракла, а без них дальше ничего не насоветуешь


Их надо указать в строке соединения?
Если да то какой формат?


 
Правильный$Вася   (2010-03-25 13:18) [5]


> ты не указал здесь тип поля

читать умеешь?


 
gog ©   (2010-03-25 14:42) [6]

Поменял значение NLS_LANG в реестре на ту, что указано для Оракловской таблицы. Теперь вместо вопросительных знаков выдается длинная последовательность символов, похожие на знак интеграла чередующие с буквами а и е из французского алфавита


 
gog ©   (2010-03-25 15:31) [7]

Можно ли поменять значение NLS_LANG из делфи?

Alter session set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

выдает ошибку как из Дельфи так и из Pl/Sql Developer. По тому менял в реестре, но там прописан во многих местах и не уверен что поменял там где надо (менял по одному запускал программу и воостанавливал старое значение). Менять сразу везде побоялся, не поставить систему верх ногами.


 
Игорь Шевченко ©   (2010-03-25 20:16) [8]

gog ©   (25.03.10 15:31) [7]

Что написано в реестре для NLS_LANG и какого типа поля ты пытаешься выбрать в запросе ?

ну и заодно, что выдает

select parameter,substr(value,1,30) from nls_database_parameters where parameter like "NLS%";


 
gog ©   (2010-03-26 09:04) [9]

Тип поля varchar(2)

NLS_LANG для таблиц на сервере AMERICAN_AMERICA.AL32UTF8

в реестре для NLS_LANG в разных ключах прописаны разные значения, в том числе и указанное выше.
Запрос  SELECT userenv ("language") from DUAL как с PL/SQL Developer, так из Дельфи выдает  AMERICAN_AMERICA.AL32UTF8

Запрос select parameter,substr(value,1,30) from nls_database_parameters where parameter like "NLS%" дал следующее:

PARAMETER                          SUBSTR(VALUE,1,30)
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_LANGUAGE                         AMERICAN
NLS_TERRITORY                         AMERICA
NLS_CURRENCY                         $
NLS_ISO_CURRENCY                 AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET                 AL32UTF8
NLS_CALENDAR                         GREGORIAN
NLS_DATE_FORMAT                 DD-MON-RR
NLS_DATE_LANGUAGE                 AMERICAN
NLS_SORT                                 BINARY
NLS_TIME_FORMAT                 HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT         DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT                 HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY                 $
NLS_COMP                                 BINARY
NLS_LENGTH_SEMANTICS         BYTE
NLS_NCHAR_CONV_EXCP         FALSE
NLS_RDBMS_VERSION                10.2.0.4.0

Из PL/SQL Developer все работает правильно, Дельфи не хочет никак


 
Игорь Шевченко ©   (2010-03-26 10:54) [10]

gog ©   (26.03.10 09:04) [9]

Понятно, база у тебя в unicode, а вот клиент в какой кодировке воспринимает ?
к тому ли ты Oracle_home подключаешься из Delphi, у которого NLS_LANG юникодный указан ?


 
Правильный$Вася   (2010-03-26 11:11) [11]


> Тип поля varchar(2)

если мне не изменяет память, NVARCHAR надо


 
Кщд   (2010-03-26 11:36) [12]

>Правильный$Вася   (26.03.10 11:11) [11]
при кодировке базы AL32UTF8?
изменяет



Страницы: 1 вся ветка

Текущий архив: 2012.01.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
2-1316988773
Krema
2011-09-26 02:12
2012.01.01
Иероглифы в справке


2-1316502373
i2e
2011-09-20 11:06
2012.01.01
ShortString - max 255 символов. А String?


2-1317030684
Gu
2011-09-26 13:51
2012.01.01
Передать commandline


15-1316076889
ProgRAMmer Dimonych
2011-09-15 12:54
2012.01.01
ASLR - проблема в Delphi или Windows?


2-1316610955
Псарь
2011-09-21 17:15
2012.01.01
Мерцает окно при изменении размеров.