Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Добрый день !

Имею процедуру в экселе
Sub getData()
      
    Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim query As String, strCon As String
    Set con = New ADODB.Connection
    Set rs = New ADODB.Recordset
      
      
    strCon = "Provider=SQLOLEDB; " & _
            "Data Source=localhost; " & _
            "Initial Catalog=mdbase;" & _
            "User ID=test; Password=test; Trusted_Connection=yes"
    con.Open (strCon)
    With rs
        .ActiveConnection = con
        .Open "select top 3 name_ru from country; select top 3 name from city"
        Sheets("data").Range("A1").CopyFromRecordset rs
        Kill ActiveWorkbook.Path & "\\" & "test.xml"
        rs.Save ActiveWorkbook.Path & "\\" & "test.xml", adPersistXML 
    End With
    
    rs.Close
    Set rs = Nothing
    Set con = Nothing

End Sub


Содержимое XML файла


<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
<s:AttributeType name='name_ru' rs:number='1' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='128' rs:maybenull='false'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row name_ru='Австрия'/>
<z:row name_ru='Азербайджан'/>
<z:row name_ru='Армения'/>
</rs:data>
</xml>

Но запрос возвращает два ровсета. Как мне в один XML файл записать оба и можно ли это ?
MSSQL 2012. Excel 2010

Заранее всем спасибо
21 май 13, 11:50    [14325441]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
vaskabww,

какой это язык?
21 май 13, 11:59    [14325529]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
pation,
VBA
21 май 13, 12:01    [14325557]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72946
Технически можно, но на что такой xml годен? С помощью xsl разве что в какой-нибудь html превратить.
21 май 13, 12:02    [14325567]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
тут дело в том, что мне надо генерить такой иксмл сервером приложений. потом из экселя по HTTP иду на сервер приложений, тяну XML и рисую отчет. хотелось бы сразу несколько рекордсетов получать в одном XML, а не по одному. вот интересуюсь, есть ли такой стандартный XML. типа как датасет
21 май 13, 12:09    [14325664]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Antonariy,
Отчет, грубо говоря, рисую так
Public Function RecordsetFromXMLString(ByRef sXML As String) As Recordset

    Dim oStream As ADODB.Stream
    Set oStream = New ADODB.Stream
    oStream.Open
    oStream.WriteText sXML   
    oStream.Position = 0    
    Dim oRecordset As ADODB.Recordset
    Set oRecordset = New ADODB.Recordset
    oRecordset.Open oStream   

    oStream.Close
    Set oStream = Nothing
    Set RecordsetFromXMLString = oRecordset  'Return the recordset

    ' Вот тут хорошо бы перебрать все рекордсеты через NextRecordset

    Sheets("data").Range("A1").CopyFromRecordset oRecordset
    Set oRecordset = Nothing
End Function
21 май 13, 12:15    [14325727]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72946
Ясно. Собираешь на сервере все рекордсеты в один документ вида
<root>
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...>
    </xml>
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...>
    </xml>
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...>
    </xml>
</root>
А на клиенте разбираешь обратно по рекордсетам.
21 май 13, 12:22    [14325805]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72946
Хотя нет, так просто не выйдет, начнется свистопляска с одноименным неймспейсами.
Чуть сложнее:
<root>
    <![CDATA[
        <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...></xml>
    ]]>
    <![CDATA[
        <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...></xml>
    ]]>
    <![CDATA[
        <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'...></xml>
    ]]>
</root>
21 май 13, 12:36    [14325958]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Antonariy,
спасибо
Но оно откроется стандартно через, как у меня написано
   oRecordset.Open oStream


?
21 май 13, 12:39    [14325979]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Antonariy,

Вот так не хочет работать - не удается создать объект recordset. Неполный или недопустимый источник XML

<root>
<![CDATA[
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
	xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
	xmlns:rs='urn:schemas-microsoft-com:rowset'
	xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
	<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
		<s:AttributeType name='name_ru' rs:number='1' rs:writeunknown='true'>
			<s:datatype dt:type='string' dt:maxLength='128' rs:maybenull='false'/>
		</s:AttributeType>
		<s:extends type='rs:rowbase'/>
	</s:ElementType>
</s:Schema>
<rs:data>
	<z:row name_ru='Австрия'/>
	<z:row name_ru='Азербайджан'/>
	<z:row name_ru='Армения'/>
</rs:data>
</xml>
]]>
</root>
21 май 13, 12:51    [14326083]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72946
Я сказал же "разобрать обратно", а "пихать целиком".
Соображать же надо.
21 май 13, 12:55    [14326137]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Antonariy,

А ! понял, спасибо
21 май 13, 13:00    [14326202]     Ответить | Цитировать Сообщить модератору
 Re: Несколько rowset'ов в один XML  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
... и причем тут, вообще, .NET
21 май 13, 13:37    [14326470]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить