Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];

Вниз

Не читаются 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1317121653
Scott Storch
2011-09-27 15:07
2012.01.01
вопрос к знатокам СУБД DBISAM.


4-1253616407
Xmen
2009-09-22 14:46
2012.01.01
ShellListView


2-1316788939
Litt
2011-09-23 18:42
2012.01.01
CM_MOUSEENTER


15-1316065835
Gu
2011-09-15 09:50
2012.01.01
Свернуть процедуры


2-1317136441
Antoxa
2011-09-27 19:14
2012.01.01
DragNDrop в приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский