Ligar ao serviço web em MS Access com VBA
é possível ligar-se a um serviço web (por exemplo, enviar um pedido HTTP) via VBA em Microsoft Access?
Por exemplo, o usuário clica um botão em um formulário, então um pedido HTTP é enviado para um serviço web que responde com OK
.
Nota: VBA, não VB.NET.
3 answers
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
O SReq é o URL; a função devolve a resposta. Poderá ter de se certificar de que os objectos de dados ActiveX estão activos sob as suas referências (no editor de VBA, vá para Ferramentas > referências).
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
Usei o pacote de ferramentas" Microsoft Office 2003 Web Services Toolkit 2.01 " (disponível aqui) em alguns projectos. Funcionou muito bem para mim, embora eu também tenha escrito os serviços da web com os quais estava falando, então eu tive o luxo de ser capaz de mexer com ambas as extremidades do processo ao fazê-lo realmente funcionar. :)
Na verdade, acabei de atualizar um desses aplicativos do Access_2003 para Access_2010 e a parte do cliente SOAP do app continuou a funcionar sem modificações. No entanto, encontrei uma ruga durante os testes de pré-implantação:O meu aplicativo não iria compilar numa máquina de 64 bits a rodar 32 bits Office_2010 porque não gostava da ligação inicial do objecto SoapClient30
. Quando eu mudei para usar a ligação tardia para esse objeto o código iria compilar, mas não funcionou. Então, para esse app em particular eu tive que adicionar uma restrição que máquinas 64-bit precisavam estar executando Escritório 64-bit.