使用VBA连接到MS Access中的Web服务

时间:2013-03-26 18:02:59

标签: web-services ms-access ms-access-2007 access-vba

是否可以通过VBA Microsoft Access连接到Web服务(例如发送HTTP请求)? 例如,用户单击表单上的按钮,然后将HTTP请求发送到以OK响应的Web服务。

以前有人这样做过吗?

注意:VBA,而不是VB.NET。

3 个答案:

答案 0 :(得分:12)

这是我在Access 2003中非常成功使用的代码。它是来自互联网,很久以前复制和重新复制。它创建一个XMLHttpRequest Object,发送HTTP GET请求,并将结果作为字符串返回。

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是URL;该函数返回响应。您可能需要确保在引用下启用ActiveX数据对象(在VBA编辑器中,转到工具>引用)。

答案 1 :(得分:2)

这是我用过的代码。您需要首先引用Microsoft XML V6才能使此代码生效。

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

答案 2 :(得分:1)

我在一些项目中使用了“Microsoft Office 2003 Web Services Toolkit 2.01”工具包(可用here)。它对我来说效果很好,虽然我也写了它正在谈论的网络服务,所以我很幸运能够在实际工作的过程中摆弄过程的两端。 :)

事实上,我刚刚将其中一个应用程序从Access_2003升级到Access_2010,应用程序的SOAP客户端部分继续工作而无需修改。但是,我在部署前测试中遇到了一个问题:

我的应用程序无法在运行32位Office_2010的64位计算机上编译,因为它不喜欢SoapClient30对象的早期绑定。当我切换到对该对象使用后期绑定时,代码将编译,但它不起作用。所以,对于那个特定的应用程序,我不得不添加64位计算机需要运行64位Office的限制。

另外,请注意微软的官方立场是“所有SOAP工具包已被Microsoft .NET Framework取代。” (参考here)。