Здравствуйте, *Rik*. Огромное спасибо за Вашу работу над компонентами.
Нашел такую проблему. Работаю с компонентом TIBSQL под Windows, цепляюсь к базе в кодировке UTF8. Выполняю SELECT-запрос, у которого прописаны русские алиасы полей в кавычках после AS. Затем вычитываю имена этих полей через Fields [x].Name. Получается белиберда - первые символы отображаются черте как.
Прилагаю тестовый проект. У него в качестве клиентской библиотеки забита fbembed.dll. Программа создает простейшую базу в каталоге приложения, заполняет табличку одной строкой и пытается ее вычитать.
[Решено] TIBSQL - непонятки с именами полей.
Модератор: Модераторы
[Решено] TIBSQL - непонятки с именами полей.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось slyubez 19.07.2015 12:22:07, всего редактировалось 1 раз.
Спасибо заранее.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
slyubez
Исправил.
http://visual-t.ru/download.html
или прямая ссылка:
http://visual-t.ru/files/components.7z
В архиве 3 пакета компонент, если нужны только ibx, извлеките только их.
Исправил.
http://visual-t.ru/download.html
или прямая ссылка:
http://visual-t.ru/files/components.7z
В архиве 3 пакета компонент, если нужны только ibx, извлеките только их.
Благодарю. Попробую.
Добавлено спустя 20 минут 34 секунды:
Попробовал. Проверил на рабочем проекте. Теперь эти алиасы почему-то отображаются в ВЕРХНЕМ регистре и впридачу обрезаются в длине до 16 символов. Это точно не ограничение Firebird - в FIB+ с Delphi такого поведения не отмечал. С IBX на Delphi не работал уже очень давно и не касался алиасов полей, тем более у меня сейчас D2010 с непиленными под UTF8 компонентами IBX.
Добавлено спустя 20 минут 34 секунды:
Попробовал. Проверил на рабочем проекте. Теперь эти алиасы почему-то отображаются в ВЕРХНЕМ регистре и впридачу обрезаются в длине до 16 символов. Это точно не ограничение Firebird - в FIB+ с Delphi такого поведения не отмечал. С IBX на Delphi не работал уже очень давно и не касался алиасов полей, тем более у меня сейчас D2010 с непиленными под UTF8 компонентами IBX.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
slyubez писал(а):Проверил на рабочем проекте. Теперь эти алиасы почему-то отображаются в ВЕРХНЕМ регистре и впридачу обрезаются в длине до 16 символов. Это точно не ограничение Firebird - в FIB+ с Delphi такого поведения не отмечал. С IBX на Delphi не работал уже очень давно и не касался алиасов полей, тем более у меня сейчас D2010 с непиленными под UTF8 компонентами IBX.
Для передачи информации к серверу и обратно, компоненты манипулируют записью TXSQLVAR (объявлена в IBHeader) через клиентскую библиотеку fbclient.* или fbembed.dll.
Код: Выделить всё
TXSQLVAR = record
sqltype : Short; (** datatype of field **)
sqlscale : Short; (** scale factor **)
sqlsubtype : Short; (** datatype subtype - BLOBs **)
(** & text types only **)
sqllen : Short; (** length of data area **)
sqldata : PChar; (** address of data **)
sqlind : PShort; (** address of indicator **)
(** variable **)
sqlname_length : Short; (** length of sqlname field **)
(** name of field, name length + space for NULL **)
sqlname : array[0..31] of Char;
relname_length : Short; (** length of relation name **)
(** field's relation name + space for NULL **)
relname : array[0..31] of Char;
ownname_length : Short; (** length of owner name **)
(** relation's owner name + space for NULL **)
ownname : array[0..31] of Char;
aliasname_length : Short; (** length of alias name **)
(** relation's alias name + space for NULL **)
aliasname : array[0..31] of Char;
end; // TXSQLVAR
Как видно размер полей для передачи имен ограничен [0..31], а т.к. русские символы занимают в UTF8 - 2 байта, то соответственно русский алиас обрежется вдвое от указанной длины, заполнение структуры происходит на сервере, поэтому русские алиасы, для UTF-8 на клиенте, уже с сервера приходят обрезанными. На данный момент найти какую-то альтернативу решения проблемы довольно проблематично, поэтому могу только рекомендовать не использовать русские алиасы..
Спасибо за инфу и за внимание к проблеме. Вспомнил, что в Delphi я работаю через ANSI, и там можно задавать больше символов именно за счет этой кодировки. Буду думать об иных путях задания заголовков полей.
