Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Несколько rowset'ов в один XML / 13 сообщений из 13, страница 1 из 1
21.05.2013, 11:50
    #38265861
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Добрый день !

Имею процедуру в экселе
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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 файла

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<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

Заранее всем спасибо
...
Рейтинг: 0 / 0
21.05.2013, 11:59
    #38265889
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
vaskabww,

какой это язык?
...
Рейтинг: 0 / 0
21.05.2013, 12:01
    #38265897
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
pation,
VBA
...
Рейтинг: 0 / 0
21.05.2013, 12:02
    #38265900
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Технически можно, но на что такой xml годен? С помощью xsl разве что в какой-нибудь html превратить.
...
Рейтинг: 0 / 0
21.05.2013, 12:09
    #38265942
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
тут дело в том, что мне надо генерить такой иксмл сервером приложений. потом из экселя по HTTP иду на сервер приложений, тяну XML и рисую отчет. хотелось бы сразу несколько рекордсетов получать в одном XML, а не по одному. вот интересуюсь, есть ли такой стандартный XML. типа как датасет
...
Рейтинг: 0 / 0
21.05.2013, 12:15
    #38265967
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Antonariy,
Отчет, грубо говоря, рисую так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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
...
Рейтинг: 0 / 0
21.05.2013, 12:22
    #38265994
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Ясно. Собираешь на сервере все рекордсеты в один документ вида
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<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>

А на клиенте разбираешь обратно по рекордсетам.
...
Рейтинг: 0 / 0
21.05.2013, 12:36
    #38266046
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Хотя нет, так просто не выйдет, начнется свистопляска с одноименным неймспейсами.
Чуть сложнее:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<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>
...
Рейтинг: 0 / 0
21.05.2013, 12:39
    #38266058
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Antonariy,
спасибо
Но оно откроется стандартно через, как у меня написано
Код: vbnet
1.
   oRecordset.Open oStream



?
...
Рейтинг: 0 / 0
21.05.2013, 12:51
    #38266101
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Antonariy,

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

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<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>
...
Рейтинг: 0 / 0
21.05.2013, 12:55
    #38266117
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Я сказал же "разобрать обратно", а "пихать целиком".
Соображать же надо.
...
Рейтинг: 0 / 0
21.05.2013, 13:00
    #38266142
vaskabww
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
Antonariy,

А ! понял, спасибо
...
Рейтинг: 0 / 0
21.05.2013, 13:37
    #38266243
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько rowset'ов в один XML
... и причем тут, вообще, .NET
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Несколько rowset'ов в один XML / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]