-
Господа посоветуйте что делать?
Использую Дельфи 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
-
Тип поля в таблице и значение 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
-
Г-н Игор Шевченко
Указал рекомендуемый Вами провайдер но получил сообщение
"Provider cannot be found. It may not be properly installed"
Поясните пожалуиста как он инстолируется и что значит "Тип поля в таблице и значение NLS_LANG в студию"
-
> Указал рекомендуемый Вами провайдер но получил сообщение"Provider
> cannot be found. It may not be properly installed"
ставится с клиентом оракла
> что значит "Тип поля в таблице и значение NLS_LANG в студию"
это значит, что ты не указал здесь тип поля и значение сессионной переменной оракла, а без них дальше ничего не насоветуешь
-
> это значит, что ты не указал здесь тип поля и значение сессионной
> переменной оракла, а без них дальше ничего не насоветуешь
Их надо указать в строке соединения?
Если да то какой формат?
-
> ты не указал здесь тип поля
читать умеешь?
-
Поменял значение NLS_LANG в реестре на ту, что указано для Оракловской таблицы. Теперь вместо вопросительных знаков выдается длинная последовательность символов, похожие на знак интеграла чередующие с буквами а и е из французского алфавита
-
Можно ли поменять значение NLS_LANG из делфи?
Alter session set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
выдает ошибку как из Дельфи так и из Pl/Sql Developer. По тому менял в реестре, но там прописан во многих местах и не уверен что поменял там где надо (менял по одному запускал программу и воостанавливал старое значение). Менять сразу везде побоялся, не поставить систему верх ногами.
-
gog © (25.03.10 15:31) [7]
Что написано в реестре для NLS_LANG и какого типа поля ты пытаешься выбрать в запросе ?
ну и заодно, что выдает
select parameter,substr(value,1,30) from nls_database_parameters where parameter like 'NLS%';
-
Тип поля 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 все работает правильно, Дельфи не хочет никак
-
gog © (26.03.10 09:04) [9]
Понятно, база у тебя в unicode, а вот клиент в какой кодировке воспринимает ?
к тому ли ты Oracle_home подключаешься из Delphi, у которого NLS_LANG юникодный указан ?
-
> Тип поля varchar(2)
если мне не изменяет память, NVARCHAR надо
-
>Правильный$Вася (26.03.10 11:11) [11]
при кодировке базы AL32UTF8?
изменяет