【问题标题】:Test to see if ODBC Linked Table is Available测试 ODBC 链接表是否可用
【发布时间】:2020-03-16 13:24:14
【问题描述】:

我有一个 Access 数据库,它使用 ODBC 连接链接到其他 SQL 数据库中的六个表。然后,我有几个查询对这些表进行检查,生成一些报告。但是,在运行查询之前,我想确保所有六个表都可以访问。所有数据库都在异地,我通过 VPN 连接连接到它们,因此由于连接限制,表可能会离线几分钟。

我已经进行了很多搜索,但我无法找到可以远程回答我问题的内容。

理想情况下,我希望有一个表格列表,每个表格旁边都有一个小绿点/红点,显示它是否在线。但我想一个人需要现实。

我们将不胜感激。

【问题讨论】:

  • 您最好的办法是尝试将表作为记录集打开,看看这个操作的结果是什么。您可以使用表名和绿/红点创建一个表单,并使用 OnTimer 事件在您认为必要的任何时间间隔执行检查。
  • 非常感谢。我对 Access 和 ODBC 表还是很陌生。我将如何“将表作为记录集打开”。我不知道该怎么做。

标签: ms-access odbc linked-tables


【解决方案1】:

您可以简单地“尝试”并打开相关表格。但是,如果您的连接消失了,那么您会发现一些非常讨厌的影响。首先你得到一个巨大的延迟(坏)。如果您触发了 ODBC 错误,在大多数情况下您必须退出应用程序。

要避免上述情况?

事实证明,有一个不同的途径可以访问以检查您是否使用了服务器。它不仅消除了可怕的和所有邪恶的 ODBC 错误,而且还可以更快地启动错误!您会发现“错误输出”非常快!

它的工作方式是您使用 queryDef 来检查您是否有连接。这会导致访问使用“不同”路径并进行测试,然后打开一个 reocrdset。

所以这种方法避免了长时间的延迟,也避免了 ODBC 错误。

您可以使用此例程进行测试:

Function TestLogon(strCon As String) As Boolean

  On Error GoTo TestError

  Dim dbs          As DAO.Database
  Dim qdf          As DAO.QueryDef

  Set dbs = CurrentDb()
  Set qdf = dbs.CreateQueryDef("")

   qdf.Connect = strCon
   qdf.ReturnsRecords = False

   'Any VALID SQL statement that runs on server will work below.

   qdf.SQL = "SELECT 1"

   qdf.Execute

   TestLogon = True

   Exit Function

TestError:
   TestLogon = False
   Exit Function

End Function

现在,假设在我们的代码中,我们有一个链接表。因此,我们可以使用/获取该链接表的连接,并像这样进行测试:

Sub MyCoolUpdate()

  Dim strCon     As String

  Dim rstHotels  As DAO.Recordset

  strCon = CurrentDb.TableDefs("dbo_tblHotels").Connect

  If TestLogon(strCon) = True Then

     ' it is safe to open the linked table,
     'eg:
     Set rstHotels = CurrentDb.OpenRecordset("dbo_tblHotels", dbOpenDynaset, dbSeeChanges)

     ' we are conneced - do your stuff
     ' walk the dog - do updates

     rstHotels.Close

  End If

End Sub

因此,我强烈建议您在使用上述技巧进行测试之前,不要尝试将链接表触摸到服务器。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2012-02-25
    • 2013-01-10
    相关资源
    最近更新 更多