xml поле

Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
Ответить
WildFrag
Сообщения: 22
Зарегистрирован: Пн 29 апр 2013 11:41

xml поле

Сообщение WildFrag » Вт 02 май 2017 14:16

Или я чего-то не понимаю или лыжи совсем не катят.
На форме лежит TMSSQLConnection, установлено соединение с сервером.
Параметры соединения и клиента:
Microsoft SQL Server 12.00.5000
Microsoft SQL Server Native Client 11.0: 11.0.2100.60
В TMSQuery делаю запрос вида SELECT * FROM xxx FOR XML PATH, в SSMS результат отлично виден в виде XML.
В дизайне смотрю поле получилось типа TBlobField. Пытаюсь считать значение следующим образом
s:= TMSXMLField(qXML.Fields[0]).XML и в итоге в переменной s я не вижу нормального xml значения.
Что я делаю не так? :) Delphi XE7 и SDAC 7.3.13

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

Re: xml поле

Сообщение AndreyZ » Чт 04 май 2017 09:45

Чтобы SQL Server возвращал результат SQL запроса не как BLOB, а как XML, добавьте ключевое слово TYPE в выражение FOR XML. Например:

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

SELECT * FROM xxx FOR XML PATH, TYPE

WildFrag
Сообщения: 22
Зарегистрирован: Пн 29 апр 2013 11:41

Re: xml поле

Сообщение WildFrag » Чт 04 май 2017 10:01

Добрый день, спасибо за оперативный ответ. Думаю это стоит добавить куда-то в документацию или FAQ, так как в том же SSMS результат без TYPE точно также просматривается как xml. SDAC же требует четкого возврата типа xml для того чтобы поле датасета создалось TMSXMLField, а не TBlobField.

PS: кстати я решил данную проблему через присвоение результата генерации xml типу varchar(MAX) и возврату уже этого типа. Может кому пригодится. Ну и для общего развития, если TYPE не указан, то результат возвращается в виде nvarchar(MAХ).

Ответить