Страница 1 из 1

sql_variant mapping

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

Re: sql_variant mapping

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

Re: sql_variant mapping

Добавлено: Чт 20 июн 2013 10:48
MaratSafin
Спасибо, это я как то не проверил :(

Re: sql_variant mapping

Добавлено: Пт 21 июн 2013 06:31
AndreyZ
Пожалуйста. Обращайтесь к нам если у Вас возникут вопросы по нашим dbExpress драйверам.

Re: sql_variant mapping

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

Re: sql_variant mapping

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

Re: sql_variant mapping

Добавлено: Сб 12 окт 2013 04:05
MaratSafin
Не подскажите, что то решили по данной проблеме?

Re: sql_variant mapping

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