sql_variant mapping
-
- Сообщения: 12
- Зарегистрирован: Ср 19 июн 2013 05:41
sql_variant mapping
При использовании dbExpress драйвера, для типа MS SQL sql_variant используется тип Delphi TStringField, это не удобно, так как необходимо, что бы в базе данные сохранялись именно, с типом с каким их внесли на клиенте. Мы используем связку TSQLDataSet -> TDataSetProvider -> TClientDataSet в результате в TClientDataSet поле sql_variant имеет тип string, в место Variant. Можно как то сделать, что бы для поля sql_variant в место типа TStringField использовался TVariantField?
Re: sql_variant mapping
TClientDataSet не поддерживает поля TVariantField. Вы можете проверить это используя следующие шаги:
- создайте новое приложение;
- киньте на форму TClientDataSet;
- откройте Fields Editor и добавьте одно поле с типом Variant;
- кликните на TClientDataSet правой кнопкой мыши и выберите "Create DataSet".
В результате Вы получите ошибку "Invalid Field Type". Поэтому dbExpress driver for SQL Server создает TStringField поля для столбцов с типом sql_variant.
- создайте новое приложение;
- киньте на форму TClientDataSet;
- откройте Fields Editor и добавьте одно поле с типом Variant;
- кликните на TClientDataSet правой кнопкой мыши и выберите "Create DataSet".
В результате Вы получите ошибку "Invalid Field Type". Поэтому dbExpress driver for SQL Server создает TStringField поля для столбцов с типом sql_variant.
-
- Сообщения: 12
- Зарегистрирован: Ср 19 июн 2013 05:41
Re: sql_variant mapping
Спасибо, это я как то не проверил ![Sad :(](./images/smilies/icon_sad.gif)
![Sad :(](./images/smilies/icon_sad.gif)
Re: sql_variant mapping
Пожалуйста. Обращайтесь к нам если у Вас возникут вопросы по нашим dbExpress драйверам.
-
- Сообщения: 12
- Зарегистрирован: Ср 19 июн 2013 05:41
Re: sql_variant mapping
Можно ещё вопрос по этой же проблеме.
Драйвер dbExpress использует для sql_variant строку с максимальной длинной 16 символов. В результате TClientDataSet не даёт записать в поле более 16 символов. Можно как то установить максимальный размер строки?
Драйвер dbExpress использует для sql_variant строку с максимальной длинной 16 символов. В результате TClientDataSet не даёт записать в поле более 16 символов. Можно как то установить максимальный размер строки?
Re: sql_variant mapping
dbExpress driver for SQL Server заполняет длину полей используя метаданные которые возвращает SQL Server. Для sql_variant типа, SQL Server возвращает размер поля 16. Мы исследуем данную проблему и возможные пути её обхода.
-
- Сообщения: 12
- Зарегистрирован: Ср 19 июн 2013 05:41
Re: sql_variant mapping
Не подскажите, что то решили по данной проблеме?
Re: sql_variant mapping
Мы изменили поведение нашего драйвера. Теперь поля TStringField созданные для типа sql_variant будут иметь длину 8000 (это максимально возможная длина для типа sql_variant, подробнее об этом написано здесь: http://technet.microsoft.com/en-us/libr ... 73829.aspx ). Данное изменение войдет в следующий билд dbExpress driver for SQL Server.