如何通过 Access VBA 连接到启用了 web-API 的数据库

How to connect to a web-API enabled database via Access VBA

在 Windows 2007 年,我尝试使用我在互联网上找到的以下 Access VBA 子例程将 Access(2016 64 位)数据库连接到另一个 web-API启用Access(2016 64位)数据库提取一些数据元素:

Sub DownloadFile0()

Dim Stm As ADODB.Stream
Dim Rec As New ADODB.Record
Dim Conn As New ADODB.Connection
Dim Url As String, Str As String

Url = "http://www.elesteshary.com/sosdata.accdb/sdr/doll_per_sdr" ' URL, database, record, and field names

Conn.Provider = "ExOLEDB.DataSource"
Conn.Open Url
Rec.Open Url, Conn
Set Stm = Rec.Fields(adDefaultStream).Value
Str = Stm.ReadText
...

Conn.Close
Rec.Close
Stm.Close
Set Conn = Nothing
Set Rec = Nothing
Set Stm = Nothing

End Sub

当 运行 时,我收到“找不到提供商”。建议我可以使用哪个提供商来代替“ExOLEDB”,我怎样才能得到它?当我绕过“Conn.Provider”语句时,我收到“数据源名称太长”。这是因为缺少提供者吗?如果有问题,请更正代码。如果都设置了,“Str”会不会包含“doll_per_sdr”的值? “sdr”是一条记录 table。如果我需要从多记录table的特定记录中查询一个字段怎么办?最后,这个子程序可以从非Access数据库中提取数据吗?

注意:不允许下载“sosdata.accdb”。

此致。

El Noshokaty 博士说, 信息系统教授

你不能这样做。您发现的代码需要特定的 URL 语法和知道如何解析它的 Web 服务器才能知道:

  • 要打开的数据库(sosdata.accdb)
  • 要在数据库中使用的 table (sdr)
  • 要从 table
  • 检索的记录的索引 (doll_pr_sdr)
  • return那个记录

没有开箱即用的 web-API 启用访问(2016 64 位) 能够做到这一点。这样的 API 将使用发布 API 服务(在内部)与 Access 数据库交互的 Web 服务器构建。

附录:

因为你可以下载文件,所以你可以使用 DAO。

  1. 设置引用以包括这些:

  1. 从我的项目 VBA.PictureUrl

    下载并插入模块 Internet.bas
  2. 创建一个新模块并复制粘贴此代码:

Option Compare Database
Option Explicit

Public Function DownloadSdrValue() As Currency

    Const Url       As String = "http://www.elesteshary.com/sosdata.accdb"
    
    Dim Database    As DAO.Database
    Dim Records     As DAO.Recordset

    Dim FileName    As String
    Dim Value       As Currency
    
    FileName = DownloadCacheFile(Url)
    Set Database = DBEngine(0).OpenDatabase(FileName)
    
    Set Records = Database.OpenRecordset("Select * From sdr")
    If Records.RecordCount > 0 Then
        Records.MoveFirst
        Value = Records.Fields("doll_per_sdr").Value
    End If
    Records.Close
    Database.Close
    
    Debug.Print "Value:", Value
    
    DownloadSdrValue = Value
    
End Function
  1. 编译并保存模块

  2. 像这样检索值:

    DollarPerSdr = DownloadSdrValue
  1. 结果:1.57