Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов

Ответить
k4400
Сообщения: 5
Зарегистрирован: Ср 02 ноя 2016 06:09

Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение k4400 » Ср 02 ноя 2016 06:14

привет!
столкнулся с такой проблемой.
есть самописная программа на C#. Использую для запросов dotConnect Mobile for Oracle/
Если просто писать в Label русскими, то все норм, а если делаю запрос в БД и вывожу в Label, то отображаются вопросы!
Подскажите где порыть...
ТЕрминал Memor X3, windows CE 6.0
спасибо!
Вложения
2016-11-02 11.31.06.jpg
2016-11-02 11.31.06.jpg (121.04 КБ) 13285 просмотров

k4400
Сообщения: 5
Зарегистрирован: Ср 02 ноя 2016 06:09

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение k4400 » Ср 02 ноя 2016 07:33

все! разобрался! надо в Строку подключения к базе данных написать Unicode=True

MaximG
Devart Team
Сообщения: 113
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение MaximG » Пт 04 ноя 2016 15:52

Мы рады, что Вы смогли найти решение проблемы. Обращайтесь к нам по любым вопросам использования ODAC

Andrew71
Сообщения: 2
Зарегистрирован: Чт 03 дек 2020 14:09

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение Andrew71 » Пн 07 дек 2020 08:43

Добрый день!
Столкнулся с такой же проблемой при использовании ODAC для Delphi 7, а также Delphi 10.3.
При записи в БД любые символы (даже цифры) в таблице (в поле тип CLOB) отображаются вопросительными знаками.
Пробовал менять свойство Charset=cl8mswin1251 (такое установлено на клиенте ORACLE - NLS_CHARACTERSET, и оно же возвращается при запросе "select * from nls_database_parameters;" если выполнять через PL/SQL Developer). Пробовал менять на UTF8. Также пытался включать опцию UseUnicode=true. Результат одинаковый - вопросительные знаки в поле clob. В текстовых полях кодировка нормальная.
Третий день бьюсь над этой проблемой. Прошу помощи!

MaximG
Devart Team
Сообщения: 113
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение MaximG » Вт 08 дек 2020 09:07

Пожалуйста уточните, какую версию ODAC Вы используете. Приведите небольшой фрагмент кода, демонстрирующий работу с CLOB-полями в Вашем приложении

Andrew71
Сообщения: 2
Зарегистрирован: Чт 03 дек 2020 14:09

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение Andrew71 » Вт 08 дек 2020 10:05

Я использую ODAC 11.3 for RAD Studio 10.3 Rio.
Настроен компонент OraSession, OraTable и OraQueue.
С записью в OraTable проблем нет - все красиво, как и должно быть. Проблема возникает при записи в очередь OraQueue.
Для демонстрации проблемы можно сделать следующее. В PL/SQL Developer запустить скрипт для подготовки исходных данных:

Код: Выделить всё

-- создаем тип данных:
create or replace type XX_QUEUE_TYPE is object
(
   t_type int
  ,t_content varchar2(1000)
  ,t_clob clob

)

-- Создаем таблицу для очереди
begin
  dbms_aqadm.create_queue_table(
    queue_table        => 'XX_QUEUE_TBL',
    queue_payload_type => 'XX_QUEUE_TYPE'
  );
end;

-- Собственно очередь
begin
  dbms_aqadm.create_queue(
    queue_name  => 'XX_QUEUE_Q',
    queue_table => 'XX_QUEUE_TBL'
  );
end;

-- Запуск очереди
begin
  dbms_aqadm.start_queue(
    queue_name  => 'XX_QUEUE_Q'
  );
end;
На форме размещена кнопка постановки сообщения и соответственно, вот процедура нажатия:

Код: Выделить всё

procedure TForm1.btEnqueueClick(Sender: TObject);
var
  MsgProp: TQueueMessageProperties;
  Payload: TOraObject;
  MsgId: String;

begin
  MsgProp := TQueueMessageProperties.Create;
  try
    MsgProp.Priority := 1;
    Payload := TOraObject.Create;
    try
      Form1.OraSession1.Connect;
      Payload.AllocObject(OraSession1.OCISvcCtx, 'XX_QUEUE_TYPE');
      Payload.AttrAsInteger['t_type'] := 333;
      Payload.AttrAsString['t_content'] := Edit1.Text;
      Payload.AttrAsLob['t_clob'].LoadFromFile('c:\temp\frez.log') ;
      Payload.AttrIsNull['t_clob'] := false;
      MsgId := OraQueue1.Enqueue(Payload, MsgProp);
      meLog.Lines.Add('Вставка: MsgId: ' + MsgId +' - Сообщение: ' + Edit1.Text );
    finally
      Payload.Free;
    end;
  finally
    MsgProp.Free;
  end;
  OraTable1.Close;
  OraTable1.Open;
end;
Процедура отрабатывает без ошибок. Формируется очередь. Но в поле t_clob вопросительные знаки.
Сам файл frez.log в кодировке UTF8. Содержимое файла: "Hello friends!"
Для того, чтобы посмотреть можно выполнить селект в PL/SQL Developer:

Код: Выделить всё

select *  from XX_QUEUE_TBL
У меня подозрение, что необходимо преобразовать исходный файл в какую-то другую кодировку. Пробовал ANSI win-1251. Результат тот же.

MaximG
Devart Team
Сообщения: 113
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Русские буквы и вопросы вместо них, Русские буквы и вопросы вместо них

Сообщение MaximG » Пт 11 дек 2020 17:49

Мы изучим описываемое Вами поведение в своем тестовом окружении и сообщим Вам о результатах

Ответить