如何在VB6中从XML获取ADORecordset?

时间:2011-06-01 11:12:19

标签: xml vb6 ado

我要求我的程序应该在XML数据源和SQL服务器之间导航。我必须从XML文件中读取记录,并且必须返回ADORecordset

以下是粗略的代码(Form1):

if (optionDB) then
  GetDBRecords 'this function should return recordset
else 
  GetXMLRecords ' this function should return Recordset
end if

Module1: ' this module contains code related to DB

Module2: ' This module should contain code related to XML

Public Function getXmlRecords() As ADODB.Recordset
    Dim oXMLDom As New DOMDocument
    Dim Recordset As New ADODB.Recordset

    If oXMLDom.Load(App.Path + "\data.xml") = False Then
        MsgBox "Failed to load xml data from file."
    End If
    Set Recordset = RecordsetFromXMLDocument(oXMLDom)
End Function

Public Function RecordsetFromXMLDocument(XMLDOMDocument As DOMDocument) As Recordset
    Dim oRecordset As ADODB.Recordset

    Set oRecordset = New ADODB.Recordset
    oRecordset.Open XMLDOMDocument ' pass the DOM Document instance as the Source argument
    Set RecordsetFromXMLDocument = oRecordset  ' return the recordset
    Set oRecordset = Nothing
End Function

它给我这个错误:

  

无法创建Recordset。源XML不完整或无效。

我应该在XML文档中添加什么内容?我是这些概念的新手。

2 个答案:

答案 0 :(得分:3)

默认情况下,xml是异步加载的 在加载前设置oXMLDom.async = False

显然,XML必须采用ADODB可理解的形式。也就是说,它必须使用某些名称空间并具有特定格式的数据。例如:

<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='foo' 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='bar' rs:number='2' rs:write='true'>
            <s:datatype dt:type='string' dt:maxLength='255' rs:precision='0' rs:maybenull='false'/>
        </s:AttributeType>
        <s:extends type='rs:rowbase'/>
    </s:ElementType>
</s:Schema>
<rs:data>
    <z:row foo='1' bar='one'/>
    <z:row foo='2' bar='two'/>
    <z:row foo='3' bar='three'/>
</rs:data>
</xml>

如果您的记录集已经包含必填字段,则可以省略s:Schema部分并仅包含rs:data
如果您想将任何随机XML提供给ADODB,最好先使用XSL进行转换。

答案 1 :(得分:2)

我自己没试过,但以下文章看起来很有趣:

Microsoft OLE DB Simple Provider

  

简单的提供商旨在   访问仅需要的数据源   基本的OLE DB支持,例如   内存数组或XML文档......   OLE DB简单提供程序(OSP)中   MDAC 2.7或更高版本已增强到   支持打开分层ADO   记录任意XML文件。