Конференция "Базы" » Не читаются unicode данные
 
  • gog © (24.03.10 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
  • Игорь Шевченко © (24.03.10 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 © (25.03.10 08:45) [2]
    Г-н Игор Шевченко

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

    Поясните пожалуиста как он инстолируется и что значит "Тип поля в таблице и значение NLS_LANG в студию"
  • Правильный$Вася (25.03.10 13:01) [3]

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

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

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

    это значит, что ты не указал здесь тип поля и значение сессионной переменной оракла, а без них дальше ничего не насоветуешь
  • gog © (25.03.10 13:12) [4]

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


    Их надо указать в строке соединения?
    Если да то какой формат?
  • Правильный$Вася (25.03.10 13:18) [5]

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

    читать умеешь?
  • gog © (25.03.10 14:42) [6]
    Поменял значение NLS_LANG в реестре на ту, что указано для Оракловской таблицы. Теперь вместо вопросительных знаков выдается длинная последовательность символов, похожие на знак интеграла чередующие с буквами а и е из французского алфавита
  • gog © (25.03.10 15:31) [7]
    Можно ли поменять значение NLS_LANG из делфи?

    Alter session set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    выдает ошибку как из Дельфи так и из Pl/Sql Developer. По тому менял в реестре, но там прописан во многих местах и не уверен что поменял там где надо (менял по одному запускал программу и воостанавливал старое значение). Менять сразу везде побоялся, не поставить систему верх ногами.
  • Игорь Шевченко © (25.03.10 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 © (26.03.10 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 все работает правильно, Дельфи не хочет никак
  • Игорь Шевченко © (26.03.10 10:54) [10]
    gog ©   (26.03.10 09:04) [9]

    Понятно, база у тебя в unicode, а вот клиент в какой кодировке воспринимает ?
    к тому ли ты Oracle_home подключаешься из Delphi, у которого NLS_LANG юникодный указан ?
  • Правильный$Вася (26.03.10 11:11) [11]

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

    если мне не изменяет память, NVARCHAR надо
  • Кщд (26.03.10 11:36) [12]
    >Правильный$Вася   (26.03.10 11:11) [11]
    при кодировке базы AL32UTF8?
    изменяет
 
Конференция "Базы" » Не читаются unicode данные
Есть новые Нет новых   [134433   +22][b:0][p:0.001]