sql_variant mapping

Обсуждение возникших проблем, предложений и ошибок dbExpress драйверов
Ответить
MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

sql_variant mapping

Сообщение MaratSafin » Ср 19 июн 2013 05:52

При использовании dbExpress драйвера, для типа MS SQL sql_variant используется тип Delphi TStringField, это не удобно, так как необходимо, что бы в базе данные сохранялись именно, с типом с каким их внесли на клиенте. Мы используем связку TSQLDataSet -> TDataSetProvider -> TClientDataSet в результате в TClientDataSet поле sql_variant имеет тип string, в место Variant. Можно как то сделать, что бы для поля sql_variant в место типа TStringField использовался TVariantField?

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

Re: sql_variant mapping

Сообщение AndreyZ » Ср 19 июн 2013 16:04

TClientDataSet не поддерживает поля TVariantField. Вы можете проверить это используя следующие шаги:
- создайте новое приложение;
- киньте на форму TClientDataSet;
- откройте Fields Editor и добавьте одно поле с типом Variant;
- кликните на TClientDataSet правой кнопкой мыши и выберите "Create DataSet".
В результате Вы получите ошибку "Invalid Field Type". Поэтому dbExpress driver for SQL Server создает TStringField поля для столбцов с типом sql_variant.

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: sql_variant mapping

Сообщение MaratSafin » Чт 20 июн 2013 10:48

Спасибо, это я как то не проверил :(

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

Re: sql_variant mapping

Сообщение AndreyZ » Пт 21 июн 2013 06:31

Пожалуйста. Обращайтесь к нам если у Вас возникут вопросы по нашим dbExpress драйверам.

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: sql_variant mapping

Сообщение MaratSafin » Пт 21 июн 2013 07:01

Можно ещё вопрос по этой же проблеме.
Драйвер dbExpress использует для sql_variant строку с максимальной длинной 16 символов. В результате TClientDataSet не даёт записать в поле более 16 символов. Можно как то установить максимальный размер строки?

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

Re: sql_variant mapping

Сообщение AndreyZ » Пт 21 июн 2013 14:57

dbExpress driver for SQL Server заполняет длину полей используя метаданные которые возвращает SQL Server. Для sql_variant типа, SQL Server возвращает размер поля 16. Мы исследуем данную проблему и возможные пути её обхода.

MaratSafin
Сообщения: 12
Зарегистрирован: Ср 19 июн 2013 05:41

Re: sql_variant mapping

Сообщение MaratSafin » Сб 12 окт 2013 04:05

Не подскажите, что то решили по данной проблеме?

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

Re: sql_variant mapping

Сообщение AndreyZ » Пн 14 окт 2013 08:45

Мы изменили поведение нашего драйвера. Теперь поля TStringField созданные для типа sql_variant будут иметь длину 8000 (это максимально возможная длина для типа sql_variant, подробнее об этом написано здесь: http://technet.microsoft.com/en-us/libr ... 73829.aspx ). Данное изменение войдет в следующий билд dbExpress driver for SQL Server.

Ответить