将MS Access(DAO)ODBC连接错误捕获到SQL Server

时间:2018-08-05 20:18:42

标签: sql-server vba error-handling odbc

在Windows 10(现在为Access 2010)上,希望不久之后在Access 2016中,我运行一个使用SQL Server的Frontend(2017,但这不是重点),并将存储过程所需的所有数据都推送到我的前端。

但是,我想将此前端与不断变化的后端一起使用(两名开发人员在lokal实例上使用它,并且应该以某种方式在便携式计算机等上脱机工作。)

现在,随着启动,我首先想检查默认连接,如果失败,我想打开一个表单,以便用户可以选择其他典型的服务器之一。

我遇到两个问题:

通过测试连接,更改延迟时间失败,因此,如果预期的连接不可用,则用户始终必须等待默认的60秒。

如果连接失败,我将无法抑制系统中的两个丑陋的错误重播(我猜这是从Windows而不是从Access来的)。如果发生错误,我希望打开一个表单,以便用户可以更好地选择服务器。

为了测试连接,我使用以下代码(p_strCon是连接字符串,如果选择了正确的字符串,它们可以正常工作!):<​​/ p>

Public Function CheckConnection() As Boolean

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef

    Set db = CurrentDb()

    db.QueryTimeout = 2
    Set qdf = db.CreateQueryDef("")

    With qdf
        .Connect = p_strCon
        .sql = "SELECT 2" 
        .ODBCTimeout = 2
        On Error Resume Next
        .OpenRecordset
        DoCmd.SetWarnings True
        If Err.Number = 0 Then        
            CheckConnection = True
        Else
            CheckConnection = False
        End If
        On Error GoTo 0
    End With

End Function

很明显,如果连接错误,.OpenRecordset就会发生错误。但是我抓不到!

是Access或Windows中的一个错误,我是否可以更改超时,也不能处理即将发生的错误?

我看过这篇文章:Catching Microsoft Access ODBC connection errors to SQL Server linked tables和其他几篇。没有为我工作,找不到任何帮助。

0 个答案:

没有答案