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

xml поле

Добавлено: Вт 02 май 2017 14:16
WildFrag
Или я чего-то не понимаю или лыжи совсем не катят.
На форме лежит 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

Re: xml поле

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

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

SELECT * FROM xxx FOR XML PATH, TYPE

Re: xml поле

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

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