我要求我的程序应该在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文档中添加什么内容?我是这些概念的新手。
答案 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文件。