学习ADO时,你可能会遇到ADO记录集问题,这里将介绍ADO记录集问题的解决方法,在这里拿出来和大家分享一下。根据您决定使用哪一种上述解决方案,可以有几种不同的方法来实现这一点。我们将单独考察每个解决方案。返回的数据是记录集的一种简单XML数据表示。现在,我们将使用MicrosoftXMLDocumentObjectModel(DOM)来检索此数据,以便在内部循环处理每一条记录,XML对这一过程的表示如下:
PrivateSubCommand1_Click()
DimaryArtists()AsString
DimoRopeasNewRope.Proxy
oRope.LoadServicesDescriptionicURI,"http://MyServer/GetArtists.xml"
GetArtistsFromXMLoRope.GetAllArtists(),aryArtists()
'现在aryArtists()是包含我们的艺术家的一个数组
SetoRope=Nothing
EndSub
http://www.mscto.com
PrivateSubGetArtistsFromXML(ByValsXMLAsString,ByRefaryArtists()AsString)
DimoXMLAsNewMSXML.DOMDocument
DimoXMLDocumentAsMSXML.IXMLDOMElement
DimiCountAsInteger
DimxAsInteger
oXML.loadXMLsXML
SetoXMLDocument=oXML.documentElement
iCount=oXMLDocument.childNodes.length
ReDimaryArtists(iCount-1)
Forx=0ToiCount-1
aryArtists(x)=oXMLDocument.childNodes.Item(x).Text
Next
SetoXML=Nothing
SetoXMLDocument=Nothing
EndSub
- 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.
- 28.
- 29.
#T#Command1_Click()方法使用ROPE调用服务。因为该服务按解决方案1中指定的方式返回数据,所以现在就可以传递包含在我们的XML字符串中的返回数据。我们按值传递该字符串,并按引用传递一个将被置入PublicSubGetArtistsFromXML中的空数组。此过程置入数组并将它返回给调用过程。数组变量aryArtists()现在包含我们的艺术家的一个数组。为了将此XML数据返回给一个ADO记录集,我们需要将数据加载到XMLDOM中,然后使用ADO记录集的OPEN方法创建艺术家的记录集:
PrivateSubCommand1_Click()
DimoRSAsADODB.Recordset
DimoRopeasNewRope.Proxy
oRope.LoadServicesDescriptionicURI,"http://MyServer/GetArtists.xml"
SetoRS=CreateADORSFromXML(oRope.GetAllArtists())
'现在oRS是包含我们的艺术家数据的一个分离的ADO记录集
SetoRope=Nothing
SetoRS=Nothing
EndSub
PrivateFunctionCreateADORSFromXML(ByValsXMLAsString)AsADODB.Recordset
DimoXMLAsNewMSXML.DOMDocument
DimoRSAsNewADODB.Recordset
oXML.loadXMLsXML
oRS.OpenoXML
SetCreateADORSFromXML=oRS
SetoRS=Nothing
SetoXML=Nothing
EndFunction
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
在Command1_Click()事件中,ROPE对象调用我们的方法,该方法会就像在解决方案2中那样返回我们的XML字符串。通过调用CreateADORSFromXML函数,就可以设置一个对象引用从SOAP返回数据创建一个分离的记录集。