Unicode

Обсуждение возникших проблем, предложений и ошибок IBDAC компонентов
Ответить
marcodor
Сообщения: 10
Зарегистрирован: Пт 06 дек 2013 10:14

Unicode

Сообщение marcodor » Пт 06 дек 2013 10:32

Добрый день,

Как быть если в базе есть юникодовые поля и неюникодовые?
Например имеем поля
FULL_NAME: VARCHAR(25) CHARACTER SET UTF8
IDCD_SERIE: VARCHAR(2) CHARACTER SET ASCII или NONE
Тоесть для имя я хочу чтоб создалось TWideStringField а для серию пасспорта TStringField чтоб пользователь смог вводить только ASCII символы.

Если ставим IBCConnection.UseUnicode то IBDAC создает ВСЕ char/varchar поля как TWideStringField что думаю неправильно. Это отражается и на производительность.

Логично если чарсет у поля/домэйна юникодовое то создать TWideStringField в независимости установлен ли флаг UseUnicode или нет. UseUnicode должен иметь значение если чарсет NONE, здесь можно пихать и юникод стринг.

Спасибо!

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Unicode

Сообщение AndreyZ » Пт 06 дек 2013 12:23

Здравствуйте,

Для решения проблемы Вам следует установить опцию UseUnicode в False и использовать Data Type Mapping. Например:

Код: Выделить всё

IBCQuery1.DataTypeMap.AddFieldNameRule('FULL_NAME', ftWideString);
IBCQuery1.Open;
При этом, для поля FULL_NAME будет создан TWideStringField, а для поля IDCD_SERIE - TStringField.
Более подробную информацию о Data Type Mapping Вы можете найти в статье "Data Type Mapping" документации IBDAC.

marcodor
Сообщения: 10
Зарегистрирован: Пт 06 дек 2013 10:14

Re: Unicode

Сообщение marcodor » Пт 06 дек 2013 13:25

Так если бы было дело только в FULL_NAME дело, можно дата маппигом пользоватся. А когда куча (>100) датасетов не очень получается мапить неделю. Я как пример выдал.

Почему же не создать сразу TWideStringField если поле в базе по определению юникодовое? Логично же...

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Unicode

Сообщение AndreyZ » Пн 09 дек 2013 10:30

Мы рассмотрим возможность добавления мапинга полей по типу с указанием кодировки в одной из следующих версий. Например:

Код: Выделить всё

IBCConnection.DataTypeMap.AddDBTypeRule(ibcVarchar, ftWideString, 'UTF8');
IBCConnection.DataTypeMap.AddDBTypeRule(ibcVarchar, ftString, 'ASCII');

marcodor
Сообщения: 10
Зарегистрирован: Пт 06 дек 2013 10:14

Re: Unicode

Сообщение marcodor » Пн 09 дек 2013 11:30

Андрей, спасибо, это будет супер!

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Unicode

Сообщение AndreyZ » Пн 09 дек 2013 17:56

Пожалуйста, мы сообщим Вам когда данная функциональность будет добавлена в IBDAC.

Ответить