Отображение полей с русским текстом при запросе c Oracle

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Отображение полей с русским текстом при запросе c Oracl

Сообщение Vadim » 21.11.2008 08:06:13

Тогда попробуйте вместо 0.9.26 поставить текущий снапшот 0.9.27.
У меня что-то такое было подобное в 0.9.26, которое стало работать в 0.9.27.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей с русским текстом при запросе c Oracl

Сообщение salog » 21.11.2008 09:28:35

Vadim писал(а):Тогда попробуйте вместо 0.9.26 поставить текущий снапшот 0.9.27.
У меня что-то такое было подобное в 0.9.26, которое стало работать в 0.9.27.


Поставил.. все стабильно плохо. Видимо надо делать компонент с нормальной транслитерацией....
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

Re: Отображение полей с русским текстом при запросе c Oracl

Сообщение Steve » 24.11.2009 21:48:59

salog писал(а):Проверил вот так:
Код: Выделить всё
  SQLQuery1.Open;
  Edit2.Text := AnsiToUtf8(SQLQuery1.FieldByName('nm_u').AsString);

..и ..оно.. ЗАРАБОТАЛО!!!... Но это на уровне отдельного Edit...

А вот хоть в таком варианте:
Код: Выделить всё
procedure TForm2.StringField1GetText(Sender: TField; var aText: string; DisplayText: Boolean);
var s: string;
begin
  s:= Sender.AsString;
  aText := AnsiToUtf8(s);
end;

или в таком:
Код: Выделить всё
procedure TForm2.StringField1GetText(Sender: TField; var aText: string; DisplayText: Boolean);
var s: string;
begin
  aText := AnsiToUtf8(aText);
end;
...поле в DBGrid остается пустым.

Значит собака где то глубже порылась... Тобишь - где то глубоко в DataSet...
Знать бы где!


1) способ:
Собака зарыта в непонимании назначения параметра var aText: string; :roll:
Вы должны передать этому параметру значение, а не он вам!
Получить значение Вы можете через объект StringField1, для которого обрабатываете событие GetText.

Т.е.
Код: Выделить всё
procedure TForm2.StringField1GetText(Sender: TField; var aText: string; DisplayText: Boolean);
var s: string;
begin
  aText := AnsiToUtf8(StringField1.AsString);   
end;


Работает без проблем:
Lazarus 0.9.28.2 r22279 FPC 2.2.4 i386-win32-win32/win64
ZEOSDBO-6.6.5

Однако мне такой способ кажется не красивым! Т.к. он будет работать только в RunTime, а в DT будет оставаться проблема кодировки.
2) способ
Выход из проблемы заключается в знании самого Oracle :idea:
Есть такая функция в SQL запросе - CONVERT. Используя конструкцию:

Код: Выделить всё
CONVERT(<схема.столбец>,'UTF8') алиас


мы получим строку в UTF8 как в DT, так и RT, без дополнительной обработки.

Оба способа работают. Мне нравиться больше 2-й )
Steve
незнакомец
 
Сообщения: 5
Зарегистрирован: 24.11.2009 20:58:37

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru