Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > D2009+Fib696+DevExpress+FB2.5


Автор: Akella 30.3.2009, 22:01
Здравствуйте. Кому нибудь удавалось скрестить нормально D2009 + FibPlus 6.9.6 + DevExpress v.42 + базу Firebird 2.5 в кодировке UTF8?? 

user posted image

Слева cxDBTreeList, вверху cxGrid, внизу стандартный DBGrid D2009.

В параметрах подключения к базе указал UTF8, подключил датасет, открыл редактор полей, создал все поля.

{$DEFINE UNICODE_TO_STRING_FIELDS} определена в FIBPlus.inc

Почему в DevExpress кракозяблики smile  smile  smile ? Что не так smile ?

Автор: pseud 31.3.2009, 13:43
может...
http://ipicture.ru/

Автор: Frees 31.3.2009, 14:00
Цитата(Akella @  31.3.2009,  00:01 Найти цитируемый пост)
 D2009 + FibPlus 6.9.6 + DevExpress v.42 + базу Firebird 2.5 в кодировке UTF8



Цитата(Akella @  31.3.2009,  00:01 Найти цитируемый пост)
внизу стандартный DBGrid D2009.


проблема в DevExpress его курить надо он UTF не понял у него может что в инк поправить

Автор: Akella 31.3.2009, 14:02
Не понимаю, зачем RUSSIAN_CHARSET  smile, вроде как юникод. Вечером гляну.

Добавлено через 4 минуты и 29 секунд
Цитата(Frees @  31.3.2009,  14:00 Найти цитируемый пост)
проблема в DevExpress

По идее ещё с версии 39 была заявлена поддержка юникода. А с версии 40 или 42 была заявлена поддержка D2009. Теперь ждать пока выйдет версия с поддержкой юникода в D2009? Ох, чувствую, намучаемся все мы с этим юникодом smile 

Автор: Bose 31.3.2009, 23:47
Цитата(Akella @  31.3.2009,  13:02 Найти цитируемый пост)
Ох, чувствую, намучаемся все мы с этим юникодом


Цитата(Akella @  30.3.2009,  21:01 Найти цитируемый пост)
Кому нибудь удавалось скрестить нормально D2009 + FibPlus 6.9.6 + DevExpress v.42 + базу Firebird 2.5 в кодировке UTF8?? 

1) Мне даже не удалось скрестить D2009 + FibPlus 6.9.6(demo).
2) Также не удалось скрестить D2009 + базу Firebird в кодировке UTF8. Правда я пробовал скрещивать через IBX. Проблема и решение описаны http://www.ibase.ru/unicode_faq.html#divzero.
Правда, я только разик попробовал, и махнул рукой, ибо есть дела и поважнее.

Автор: Akella 1.4.2009, 08:39
Цитата(Bose @  31.3.2009,  23:47 Найти цитируемый пост)
1) Мне даже не удалось скрестить D2009 + FibPlus 6.9.6(demo).

А что не так? Конкретнее?

Добавлено через 4 минуты и 55 секунд
Цитата(Bose @  31.3.2009,  23:47 Найти цитируемый пост)
D2009 + базу Firebird в кодировке UTF8. Правда я пробовал скрещивать через IBX. 

http://www.sql.ru/forum/actualthread.aspx?tid=598298&hl=ibx#6225066

Автор: Bose 1.4.2009, 13:06
Цитата(Akella @  1.4.2009,  07:39 Найти цитируемый пост)
А что не так? Конкретнее?

Да это неактуально на самом деле. Просто у меня при компиляции IDE ругается, что FIBDatabase.dcu не найден.

Добавлено через 5 минут и 36 секунд
Цитата(Akella @  1.4.2009,  07:39 Найти цитируемый пост)

несовместимость у ibx 

хорошая ссылка, спасибо!

Автор: Akella 1.4.2009, 22:41
Цитата(pseud @  31.3.2009,  13:43 Найти цитируемый пост)
может...

обращаю внимание, что у меня cxDBTreeList, там нет свойства Font у колонки вообще
а у самого дерева DEFAULT_CHARSET

Автор: Akella 8.4.2009, 23:48
Цитата(Bose @  31.3.2009,  23:47 Найти цитируемый пост)
2) Также не удалось скрестить D2009 + базу Firebird в кодировке UTF8. Правда я пробовал скрещивать через IBX


Bose, вот что нашёл:

Цитата
Ошибка Division by zero в IBX Delphi 2009

Баг зарегистрирован в QualityCentral под номеровм http://qc.embarcadero.com/wc/qcmain.aspx?d=68103.

Причина - в кривом методе

function TIBXSQLVAR.GetCharsetSize: Integer;

модуля IBSQL.

В IBX до версии, поставляемой с Delphi, до сих пор не было вообще никакой поддержки unicode. В IBX 2009 этот метод появился с целью поддержки unicode, но идентификаторы кодировок InterBase в нем зашиты жестко, что приводит к несовместимости с идентификаторами кодировок в Firebird (см. отличия в поддержке UTF8), а также к некорректной обработке SQLSubtype, где и у InterBase (!) и у Firebird в старшем байте может содержаться код collate столбца. Более правильно было бы определять количество байт на символ обращаясь к столбцу RDB$BYTES_PER_CHARACTER таблицы RDB$CHARACTER_SETS. Это не только унифицировало бы поддержку InterBase и Firebird, но и обеспечило бы совместимость IBX со всеми будущими версиями InterBase, если бы в них появлялись новые кодировки. Однако такая реализация потребовала бы "кэширования" данной информации, чтобы не происходило обращение к этим таблицам каждый раз при вызове GetCharsetSize.

Пример скорректированного для Firebird кода GetCharsetSize (модуль IBSQL.pas):

function TIBXSQLVAR.GetCharsetSize: Integer;
begin
  case SQLVar.SQLSubtype and $FF of // здесь and $FF убирает id collate, возвращаемый Firebird
    0, 1, 2, 10, 11, 12, 13, 14, 19, 21, 22, 39,
    45, 46, 47, 50, 51, 52, 53, 54, 55, 58 :  Result := 1;
    5, 6, 8, 44, 56, 57, 64 : Result := 2;
    3 : Result := 3;
    4, 59 : Result := 4; // здесь правильно обрабатывается id UTF8 в Firebird
 else
   Result := 0;
 end;
end;


http://www.ibase.ru/unicode_faq.html

Автор: Akella 21.4.2009, 09:50
В файле FIBPlus.inc есть {$DEFINE UNICODE_TO_STRING_FIELDS}. Эту строку нужно закомментировать. Тогда будут создаваться TWideStringField столбцы.
А как я понял, то в D2009 столбцы TStringField не юникодные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)