2013-03-26 20 views
9

È possibile connettersi a un servizio Web (ad esempio inviare una richiesta HTTP) tramite VBA in Microsoft Access? Ad esempio, l'utente fa clic su un pulsante in un modulo, quindi una richiesta HTTP viene inviata a un servizio Web che risponde con OK.Connessione al servizio Web in MS Access con VBA

Qualcuno ha già fatto questo?

Nota: VBA, non VB.NET.

+1

Come in http://msdn.microsoft.com/en-us/library/office/aa140260(v=office.10).aspx? A proposito, MS Access utilizza VBA, non VB.Net – Fionnuala

+0

Esattamente, grazie! Ho sempre cercato VB.net che è stato il motivo per cui non ho trovato nulla ... – Chris

+0

Un'altra possibile soluzione è creare un oggetto COM in vb.net che consumi e comunichi con il servizio web, e poi si imposta un riferimento al vb.net. Penso che l'esempio XMLHttp suggerito sia probabilmente il migliore, ma se hai familiarità con vb.net, troverai che genera l'oggetto di classe con una certa facilità. –

risposta

12

Questo è il codice che ho usato con successo con Access 2003. È da interwebs, copiato e ricopiato secoli fa. Crea un XMLHttpRequest Object, invia una richiesta HTTP GET e restituisce i risultati sotto forma di stringa.

Public Function http_Resp(ByVal sReq As String) As String 

    Dim byteData() As Byte 
    Dim XMLHTTP As Object 

    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") 

    XMLHTTP.Open "GET", sReq, False 
    XMLHTTP.send 
    byteData = XMLHTTP.responseBody 

    Set XMLHTTP = Nothing 

    http_Resp = StrConv(byteData, vbUnicode) 

End Function 

sReq è l'URL; la funzione restituisce la risposta. Potrebbe essere necessario assicurarsi che ActiveX Data Objects sia abilitato sotto i riferimenti (nell'editor VBA, andare su Strumenti> Riferimenti).

+0

è possibile caricare/pubblicare un'immagine tramite l'oggetto XMLHTTP? – munjal

1

Ho utilizzato il toolkit "Microsoft Office 2003 Web Services Toolkit 2.01" (disponibile here) in alcuni progetti. Ha funzionato abbastanza bene per me, anche se ho anche scritto i servizi web con cui stava parlando, quindi ho avuto il lusso di essere in grado di giocherellare con entrambi i capi del processo quando lo si fa funzionare. :)

Infatti, ho appena aggiornato una di quelle app da Access_2003 ad Access_2010 e la parte client SOAP dell'app ha continuato a funzionare senza modifiche. Tuttavia, ho riscontrato una ruga durante i test di pre-distribuzione:

La mia app non si sarebbe compilata su una macchina a 64 bit con Office_2010 a 32 bit perché non aveva gradito l'associazione anticipata dell'oggetto SoapClient30. Quando sono passato a utilizzare l'associazione tardiva per quell'oggetto, il codice si sarebbe compilato, ma non ha funzionato. Quindi, per quella particolare app dovevo aggiungere una restrizione che le macchine a 64 bit dovevano essere in esecuzione a 64-bit Office.

Inoltre, tenere presente che la posizione ufficiale di Microsoft è che "Tutti i toolkit SOAP sono stati sostituiti da Microsoft .NET Framework". (riferimento here).

2

Questo è il codice, che ho usato. È necessario prima fare riferimento a Microsoft XML V6 affinché questo codice funzioni.

Public Sub GetPerson() 
    'For API 
    Dim reader As New XMLHTTP60 

    reader.Open "GET", "www.exmple.com/users/5428a72c86abcdee98b7e359", False 
    reader.setRequestHeader "Accept", "application/json" 
    reader.send 


    Do Until reader.ReadyState = 4 
     DoEvents 
    Loop 

    If reader.Status = 200 Then 
     Msgbox (reader.responseText) 
    Else 
     MsgBox "Unable to import data." 
    End If 
End Sub 
+3

Grazie ... Solo 3 anni dopo;) – Chris

Problemi correlati