2013-03-26 77 views
9
的MS Access

是否有可能通過VBA 連接到Web服務(例如發送一個HTTP請求)在的Microsoft Access? 例如,用戶單擊表單上的按鈕,然後將HTTP請求發送到以OK響應的Web服務。連接到Web服務與VBA

有沒有人做過這個?

注意:VBA,不是VB.NET。

+1

正如http://msdn.microsoft.com/en-us/library/office/aa140260(v=office.10).aspx?順便說一句,MS Access使用VBA,而不是VB.Net – Fionnuala 2013-03-26 18:04:37

+0

正是,謝謝!我一直在搜索VB.net,這是我沒有找到任何東西的原因...... – Chris 2013-03-26 18:21:27

+0

另一種可能的解決方案是在vb.net中構建一個COM對象,該對象消耗並與Web服務通信,然後您設置對vb.net的引用。我認爲建議的XMLHttp例子可能是最好的,但如果你有一些熟悉vb.net的話,那麼你會發現它很容易生成類對象。 – 2015-02-08 02:48:43

回答

12

這是我和Access 2003中它是從interwebs,複製和再複製很久以前使用的相當成功的代碼。它創建一個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編輯器中,轉至工具>引用)。

+0

是否可以通過XMLHTTP對象上傳/發佈圖片? – munjal 2016-12-24 07:20:30

1

我已經在幾個項目中使用的 「的Microsoft Office 2003 Web服務工具包2.01」 工具包(here)。它對我來說工作得非常好,儘管我也編寫了它正在與之交談的Web服務,所以當它實際工作時,我有能力擺脫過程的兩端的奢侈。 :)

其實,我剛剛升級從Access_2003到Access_2010這些應用程序和應用程序的SOAP客戶端部分的一個持續而無需修改工作。但是,在部署前測試期間,我確實遇到過一個皺摺:

我的應用程序無法在運行32位Office_2010的64位計算機上編譯,因爲它不喜歡早期綁定SoapClient30對象。當我切換到使用該對象的後期綁定代碼將編譯,但它不起作用。所以,對於那個特定的應用程序,我必須添加一個限制,即64位機器需要運行64位Office。

此外,要知道,微軟的官方立場是,「所有SOAP工具包已取代Microsoft .NET框架。」 (參考文獻here)。

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 
+3

謝謝......僅僅3年後;) – Chris 2016-02-25 07:18:49