формирование recordset`a из XML

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

формирование recordset`a из XML

Сообщение mshak » 13.11.2009 (Пт) 10:16

Добрый день. Возникла следующая проблема, необходимо из программы передать в ASPшную страницу рекордсет.
делаю это с помощью WinHTTP следующим образом:
в VB
Код: Выделить всё
    Set oStream = New ADODB.Stream
    Set RS = New ADODB.Recordset
        RS.Fields.Append "id", adInteger
        RS.Fields.Append "date", adDate
        RS.Fields.Append "title", adVarChar, Len(txtTitle)
        RS.Fields.Append "preview", adLongVarChar, Len(txtPreview)
        RS.Fields.Append "fulltext", adLongVarChar, Len(txtFullNew)
        RS.Open
        RS.AddNew
        RS("id").Value = txtID
        RS("date").Value = txtDate
        RS("title").Value = txtTitle
        RS("preview").Value = txtPreview
        RS("fulltext").Value = txtFullNew

        oStream.Open
        oStream.Type = adTypeText
        oStream.Position = 0
'        oStream.Charset = "UTF-8" ' на утф не работает, оставлю по умолчанию
        str = ""
        'str = "<?xml version='1.0'?>" & vbNewLine
        RS.Save oStream, adPersistXML
        oStream.Position = 0
        str = str & oStream.ReadText
        HTTP.Open "POST", ConnectionStr & "?cmd=updatenews&param1=" & str, False
        HTTP.Send

в ASP
Код: Выделить всё
...
param1 = Request("param1")
updatenews param1   
...
sub UpdateNews (RS_XML)
   dim SQL
   dim oStream : set oStream = Server.CreateObject("ADODB.Stream")
   
   oStream.Open
    oStream.Charset = "windows-1251"
   oStream.WriteText RS_XML
    oStream.Position = 0
   
   RS.Open oStream ' вот тут вылетает ошибка описанная ниже, и position устанавливается на последний символ.
   
   SQL = "UPDATE * FROM News WHERE [id]=?"   
   cmd.ActiveConnection = adoConn
   cmd.CommandText = SQL
   cmd.Parameters.Append cmd.CreateParameter("id", adVarChar, adParamInput, 15, RS("id"))
   
   cmd.Execute rc, , adCmdText or adExecuteNoRecords
   if rc = 0 then
      Response.Write "NO"
   else
      Response.Write "OK"
   end if
end sub


при этом вылезает вот такая ошибка (выдает отладчик ASP страниц):
Microsoft OLEDB Persistence Provider: Не удается прочитать объект Stream, так как он пуст или текущая позиция находится в конце потока. Для непустых объектов задайте текущую позицию с помощью свойства Position. Определите, является ли объект пустым, с помощью свойства Size.

при этом oStream.size = 1428
a oStream.readtext = "<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:updatable='true'><s:AttributeType name='id' rs:number='1' rs:write='true'><s:datatype dt:type='int' dt:maxLength='4' rs:precision='0' rs:fixedlength='true' rs:maybenull='false'/></s:AttributeType><s:AttributeType name='date' rs:number='2' rs:write='true'><s:datatype dt:type='dateTime' rs:dbtype='variantdate' dt:maxLength='16' rs:precision='0' rs:fixedlength='true' rs:maybenull='false'/></s:AttributeType><s:AttributeType name='title' rs:number='3' rs:write='true'><s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6' rs:precision='0' rs:maybenull='false'/></s:AttributeType><s:AttributeType name='preview' rs:number='4' rs:write='true'><s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='7' rs:precision='0' rs:long='true' rs:maybenull='false'/></s:AttributeType><s:AttributeType name='fulltext' rs:number='5' rs:write='true'><s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6' rs:precision='0' rs:long='true' rs:maybenull='false'/></s:AttributeType><s:extends type='rs:rowbase'/></s:ElementType></s:Schema><rs:data><rs:insert><z:row id='11' date='2334-12-12T00:00:00' title='aaajjj' preview='bbbhhhh' fulltext='dddbbb'/></rs:insert></rs:data></xml>"

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: формирование recordset`a из XML

Сообщение Antonariy » 13.11.2009 (Пт) 10:54

Попробуйте через XML.
Код: Выделить всё
dim oXML : set oXML = Server.CreateObject("MSXML2.DomDocument")
oXML.LoadXML RS_XML
RS.Open oXML
Лучший способ понять что-то самому — объяснить это другому.

mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

Re: формирование recordset`a из XML

Сообщение mshak » 13.11.2009 (Пт) 11:37

спасибо. так сработало.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList