Отображение полей с русским текстом при запросе c Oracle
Модератор: Модераторы
Отображение полей с русским текстом при запросе c Oracle
Я совершенно новичок в Lazarus. Неделю назад скачал с сайта их последнюю версию (0.9.26).
Так вот - все прекрасно, сходство с Дельфи очень вдохновляет, программы работают быстро, разрабатывать изумительно просто. Мелкие недочеты - совершенно не мешают работать.
Теперь дошел до работы с БД. Успешно присоединился к Oracle, попробовал простые select-ы - работает.
Пока наконец не заметил такой вот... такую вот особенность: если в Oracle поле содержит русский текст, то в DBGrid-е оно хотя и есть (заголовок), но содержимое совершенно пусто (смотри вложение).
Что делать? Кодировка на Oracle - WIN-1251
Так вот - все прекрасно, сходство с Дельфи очень вдохновляет, программы работают быстро, разрабатывать изумительно просто. Мелкие недочеты - совершенно не мешают работать.
Теперь дошел до работы с БД. Успешно присоединился к Oracle, попробовал простые select-ы - работает.
Пока наконец не заметил такой вот... такую вот особенность: если в Oracle поле содержит русский текст, то в DBGrid-е оно хотя и есть (заголовок), но содержимое совершенно пусто (смотри вложение).
Что делать? Кодировка на Oracle - WIN-1251
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: Отображение полей с русским текстом при запросе c Oracl
salog
А Вы через какой компонент Вы подключаетесь? Нужно в свойствах соеденения выставить кодировку - 1251.
А Вы через какой компонент Вы подключаетесь? Нужно в свойствах соеденения выставить кодировку - 1251.
Re: Отображение полей с русским текстом при запросе c Oracl
Через OracleConnection.
Я там вижу свойство CharSet... Это оно?
Или это делать через свойство Params?
Я там вижу свойство CharSet... Это оно?
Или это делать через свойство Params?
Re: Отображение полей с русским текстом при запросе c Oracl
Да, через свойство CharSet.
Re: Отображение полей с русским текстом при запросе c Oracl
А что писать? Попробовал WIN1251, 1251, RUSSIAN_CHARSET, RUSSIAN_CIS.CL8MSWIN1251... Без успеха...
А лучше всего подскажите где почитать про компонент OracleConnection и какие значения может принимать CharSet?
Видимо, нужно указывать словосочетание узнаваемое Lazarus-ом...
А лучше всего подскажите где почитать про компонент OracleConnection и какие значения может принимать CharSet?
Видимо, нужно указывать словосочетание узнаваемое Lazarus-ом...
Re: Отображение полей с русским текстом при запросе c Oracl
А попробуйте поставить UTF-8 или UTF8...
Re: Отображение полей с русским текстом при запросе c Oracl
Что-то не то. Я так понимаю UTF8 (Юникод) - он по умолчанию стоит в последних версиях Lazarus-а.
Надо заставить его переводить входящий поток в Win1251 в UTF...
Надо заставить его переводить входящий поток в Win1251 в UTF...
Re: Отображение полей с русским текстом при запросе c Oracl
1. В TSQLQuery редактируете поля (правой кнопкой мыши вызываете контекстное меню, выбираете первый пункт).
2. Для текстовых полей смотрите метод GetText (получить текст) и переопределяете его.
2. Для текстовых полей смотрите метод GetText (получить текст) и переопределяете его.
Код: Выделить всё
procedure TDM.qAutoTypeTYPE_NAMEGetText (Sender: TField; var aText: string;
DisplayText: Boolean );
begin
aText := AnsiToUtf8(Sender.AsString);
end;Re: Отображение полей с русским текстом при запросе c Oracl
Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.
Я читал про компоненты Zeos. Никто не в курсе - там эта проблема решена (ну типа может свойство какое то есть)?
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.
Я читал про компоненты Zeos. Никто не в курсе - там эта проблема решена (ну типа может свойство какое то есть)?
Re: Отображение полей с русским текстом при запросе c Oracl
salog писал(а):Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.
Я читал про компоненты Zeos. Никто не в курсе - там эта проблема решена (ну типа может свойство какое то есть)?
На сколько знаю нет.
Re: Отображение полей с русским текстом при запросе c Oracl
Не знаю, как с Oracle, а с другими работает
Значение codepage нужно подбирать.
Код: Выделить всё
ZConnection1.Properties.Add('codepage=UTF8'); Значение codepage нужно подбирать.
Re: Отображение полей с русским текстом при запросе c Oracl
salog писал(а):Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.
viewtopic.php?f=5&t=3743
Посмотрите сообщения от SAK
Re: Отображение полей с русским текстом при запросе c Oracl
GrayEddy писал(а):1. В TSQLQuery редактируете поля (правой кнопкой мыши вызываете контекстное меню, выбираете первый пункт).
2. Для текстовых полей смотрите метод GetText (получить текст) и переопределяете его.Код: Выделить всё
procedure TDM.qAutoTypeTYPE_NAMEGetText (Sender: TField; var aText: string;
DisplayText: Boolean );
begin
aText := AnsiToUtf8(Sender.AsString);
end;
Даже и так попробовал, не получилось. А при отладке выяснилось: aText сразу имеет пустое значение! Так что и конвертировать нечего!
Балина... вот беда то... будем ждать 28 версии что ли...
Re: Отображение полей с русским текстом при запросе c Oracl
Проверьте, какое значение Вы получаете в текстовом поле Query. Тоже пустое?
Re: Отображение полей с русским текстом при запросе c Oracl
Проверил вот так:
..и ..оно.. ЗАРАБОТАЛО!!!... Но это на уровне отдельного Edit...
А вот хоть в таком варианте:
или в таком:
...поле в DBGrid остается пустым.
Значит собака где то глубже порылась... Тобишь - где то глубоко в DataSet...
Знать бы где!
Код: Выделить всё
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;
Значит собака где то глубже порылась... Тобишь - где то глубоко в DataSet...
Знать бы где!
