学习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
#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
在Command1_Click()事件中,ROPE对象调用我们的方法,该方法会就像在解决方案2中那样返回我们的XML字符串。通过调用CreateADORSFromXML函数,就可以设置一个对象引用从SOAP返回数据创建一个分离的记录集。