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

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

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

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

Сообщение salog » 19.11.2008 06:15:04

Я совершенно новичок в Lazarus. Неделю назад скачал с сайта их последнюю версию (0.9.26).
Так вот - все прекрасно, сходство с Дельфи очень вдохновляет, программы работают быстро, разрабатывать изумительно просто. Мелкие недочеты - совершенно не мешают работать.

Теперь дошел до работы с БД. Успешно присоединился к Oracle, попробовал простые select-ы - работает.
Пока наконец не заметил такой вот... такую вот особенность: если в Oracle поле содержит русский текст, то в DBGrid-е оно хотя и есть (заголовок), но содержимое совершенно пусто (смотри вложение).

Что делать? Кодировка на Oracle - WIN-1251
У вас нет необходимых прав для просмотра вложений в этом сообщении.
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение Vadim » 19.11.2008 06:55:41

salog
А Вы через какой компонент Вы подключаетесь? Нужно в свойствах соеденения выставить кодировку - 1251.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение salog » 19.11.2008 07:15:53

Через OracleConnection.
Я там вижу свойство CharSet... Это оно?
Или это делать через свойство Params?
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение Vadim » 19.11.2008 07:33:08

Да, через свойство CharSet.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение salog » 19.11.2008 08:52:39

А что писать? Попробовал WIN1251, 1251, RUSSIAN_CHARSET, RUSSIAN_CIS.CL8MSWIN1251... Без успеха...
А лучше всего подскажите где почитать про компонент OracleConnection и какие значения может принимать CharSet?
Видимо, нужно указывать словосочетание узнаваемое Lazarus-ом...
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение Vadim » 19.11.2008 09:43:34

А попробуйте поставить UTF-8 или UTF8...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение salog » 19.11.2008 09:53:15

Что-то не то. Я так понимаю UTF8 (Юникод) - он по умолчанию стоит в последних версиях Lazarus-а.
Надо заставить его переводить входящий поток в Win1251 в UTF... :-(
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение GrayEddy » 19.11.2008 10:26:37

1. В TSQLQuery редактируете поля (правой кнопкой мыши вызываете контекстное меню, выбираете первый пункт).
2. Для текстовых полей смотрите метод GetText (получить текст) и переопределяете его.
Код: Выделить всё
procedure TDM.qAutoTypeTYPE_NAMEGetText (Sender: TField; var aText: string;
  DisplayText: Boolean );
begin
  aText := AnsiToUtf8(Sender.AsString);
end;
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

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

Сообщение salog » 19.11.2008 11:09:47

Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.

Я читал про компоненты Zeos. Никто не в курсе - там эта проблема решена (ну типа может свойство какое то есть)?
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение Mr.Smart » 19.11.2008 11:26:51

salog писал(а):Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.

Я читал про компоненты Zeos. Никто не в курсе - там эта проблема решена (ну типа может свойство какое то есть)?

На сколько знаю нет.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение v-t-l » 19.11.2008 11:41:54

Не знаю, как с Oracle, а с другими работает
Код: Выделить всё
ZConnection1.Properties.Add('codepage=UTF8');

Значение codepage нужно подбирать.
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

Сообщение GrayEddy » 19.11.2008 12:03:15

salog писал(а):Однако....
Тогда уже лучше определить новый тип - какой нибудь SQLQueryAnsi и там все это переопределить.


viewtopic.php?f=5&t=3743
Посмотрите сообщения от SAK
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

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

Сообщение salog » 21.11.2008 04:53:25

GrayEddy писал(а):1. В TSQLQuery редактируете поля (правой кнопкой мыши вызываете контекстное меню, выбираете первый пункт).
2. Для текстовых полей смотрите метод GetText (получить текст) и переопределяете его.
Код: Выделить всё
procedure TDM.qAutoTypeTYPE_NAMEGetText (Sender: TField; var aText: string;
  DisplayText: Boolean );
begin
  aText := AnsiToUtf8(Sender.AsString);
end;


Даже и так попробовал, не получилось. А при отладке выяснилось: aText сразу имеет пустое значение! Так что и конвертировать нечего!
Балина... вот беда то... будем ждать 28 версии что ли...
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

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

Сообщение Vadim » 21.11.2008 06:12:24

Проверьте, какое значение Вы получаете в текстовом поле Query. Тоже пустое?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение salog » 21.11.2008 07:31:15

Проверил вот так:
Код: Выделить всё
  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...
Знать бы где!
salog
новенький
 
Сообщения: 15
Зарегистрирован: 19.11.2008 05:35:07

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru