Тогда попробуйте вместо 0.9.26 поставить текущий снапшот 0.9.27.
У меня что-то такое было подобное в 0.9.26, которое стало работать в 0.9.27.
Отображение полей с русским текстом при запросе c Oracle
Модератор: Модераторы
Re: Отображение полей с русским текстом при запросе c Oracl
Vadim писал(а):Тогда попробуйте вместо 0.9.26 поставить текущий снапшот 0.9.27.
У меня что-то такое было подобное в 0.9.26, которое стало работать в 0.9.27.
Поставил.. все стабильно плохо. Видимо надо делать компонент с нормальной транслитерацией....
Re: Отображение полей с русским текстом при запросе c Oracl
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;
или в таком:...поле в DBGrid остается пустым.Код: Выделить всё
procedure TForm2.StringField1GetText(Sender: TField; var aText: string; DisplayText: Boolean);
var s: string;
begin
aText := AnsiToUtf8(aText);
end;
Значит собака где то глубже порылась... Тобишь - где то глубоко в DataSet...
Знать бы где!
1) способ:
Собака зарыта в непонимании назначения параметра var aText: string;
Вы должны передать этому параметру значение, а не он вам!
Получить значение Вы можете через объект 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
Есть такая функция в SQL запросе - CONVERT. Используя конструкцию:
Код: Выделить всё
CONVERT(<схема.столбец>,'UTF8') алиас мы получим строку в UTF8 как в DT, так и RT, без дополнительной обработки.
Оба способа работают. Мне нравиться больше 2-й )
