ist wohl keine komplexte Sache. Sie könnten ganze Recordset´s vom Soap-Server abholen. Recordset´s zuhandhaben ist einfach und bequem zu programmieren. Allerdings schieben Sie ein komplettes Objekt mit seinen Eigenschaften und Methoden übers Netz. Recordsets sind nicht gerade klein und Sie wollen ja auch nur die Daten transportieren. Besser wäre es nur Text zu senden. Und auch das ist einfach, wenn man weiss wie´s geht :-)
Wie funktioniert´s?
Das Recordset wird auf der Server-Seite mit Hilfe des ADODB.Stream-Objektes in XML konvertiert und auf der anderen Seite kann der XML-Stream ganau so simple wieder in ein Recordset konvertiert werden. Darauf resultiert ein disconnected Recordset, das sich einfach darstellen lässt.
Was brauchen Sie dafür (Softwarevoraussetzungen)?
- Getest mit ADO 2.6
- Visual Basic 6.0
- IIS
- Soap Toolkit 2.0
Sample:
Das Beispiel ist sehr einfach gestaltet und rein in VB schrieben. Die Cient-Application kann aber mit kleinen Änderungen in eine ASP-Seite umgeschrieben werden.
I. Die Server-App. "DBAcc.CDBData" als ActiveX-DLL
- Neues Project: ActiveX-Dll
- Projectname: DBAcc, Klasse umbenennen in: CDBData
- In diese Klasse den Code einfügen
Option ExplicitPublic Function GetData(ByVal sContactName As String) As Variant Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim st As New Stream conn.Open "Provider=SQLOLEDB.1;Initial Catalog=Northwind;Data Source=MyServer" rs.Open "SELECT * FROM Customers where Contactname like '" & sContactName & "'", conn ' Recordset in Stream-Object ablegen rs.Save st, adPersistXML ' Stream-Text als Rückgabe-Wert GetData = st.ReadText Set st = Nothing Set rs = Nothing Set conn = Nothing End Function - Project-Eigeschaften: unbeaufsichtige Ausführung aktivieren!!! (sehr wichtig--> wenn in der Server-App ein Fehler auftritt wird dieser unterdrückt, und nicht am Server als MsgBox angezeigt! - kompilieren/registrieren |
II. WSDL-File generieren mit Hilfe des WSDL-Generators(SOAP Toolkit)
III. Client-App als Standard-EXE
Option Explicit Public Enum eDataType enRS enXML End Enum Public Function GetData(sCustomerName As String, DataType As eDataType) As Variant Dim oSOAP As MSSOAPLib.SoapClient Set oSOAP = New SoapClient ' Soap-Client instantiieren oSOAP.ClientProperty("ServerHTTPRequest") = True ' initialisieren Soap-App mit Hilfe des "wsdl"-Files oSOAP.mssoapinit "http://localhost/developer2/soap/DBCust.wsdl" Select Case DataType Case enXML GetData = oSOAP.GetData(sCustomerName) Case enRS Set GetData = StringStreamToRS(oSOAP.GetData(sCustomerName)) End Select Set oSOAP = Nothing End Function ' den erzeugten XML-String zurück konvertieren in ein Recordset Private Function StringStreamToRS(ByRef sStream As String) As Recordset Dim rs As New Recordset Dim st As New Stream st.Open st.WriteText sStream st.Position = 0 rs.Open st Set StringStreamToRS = rs Set st = Nothing End Function Das Darstellen funktioniert mit 2 Zeilen Code, unter Verwendung des ADODC-Steuerelements und dem Datagrid Control von Microsoft... Private Sub Form_Load() Dim oDB As New CDataFetcher Set Adodc1.Recordset = oDB.GetData("%a%", enRS) End Sub |
Die Sample Source´s gibts auch wieder als Download.