10

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

有没有人这样做过?

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

4

3 回答 3

14

这是我在 Access 2003 中非常成功地使用的代码。它来自互联网,多年前被复制和重新复制。它创建一个XMLHttpRequest 对象,发送一个 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 编辑器中,转到工具 > 引用)。

于 2013-03-27T01:09:29.203 回答
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
于 2016-02-24T06:10:41.800 回答
1

我在一些项目中使用了“Microsoft Office 2003 Web Services Toolkit 2.01”工具包(可在此处获得)。它对我来说工作得很好,虽然我也写了它正在与之交谈的 Web 服务,所以我有幸在让它真正工作时能够摆弄过程的两端。:)

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

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

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

于 2013-03-26T19:08:36.823 回答