【问题标题】:MS Access VBA trapping SQL Server Connection ErrorMS Access VBA 捕获 SQL Server 连接错误
【发布时间】:2012-02-26 19:22:51
【问题描述】:

我在让 Access (2010) VBA 捕获连接到 SQL Server (2008) 以链接表的错误时遇到问题。

我得到一个错误和弹出窗口,大概来自 ODBC 驱动程序?我想抑制这些并自己处理错误。我知道 DAO.errors 和 ADO.errors 集合,但如果我无法获取错误以调用我的错误处理程序,这些将无济于事!

下面的代码将给出错误(除非您在名为 myServer 的服务器上的名为 myDatabase 的数据库中碰巧有一个名为 myTable 的表)。 我尝试使用 ADODB 而不是 DAO,但根本无法让它工作。 有什么想法吗?

Public Function main()
    Dim myDB As DAO.Database
    Dim myTabledef As DAO.TableDef

    On Error GoTo Err_handler

    Set myDB = CurrentDb
    Set myTabledef = myDB.CreateTableDef("l_table")

    DoCmd.SetWarnings False

    myTabledef.Connect = "odbc;driver=SqLServer;" & _
        "DATABASE=myDB;SERVER=myServer;Trusted_Connection=Yes;"

    myTabledef.SourceTableName = "MyTable"

    myDB.TableDefs.Append myTabledef

    DoCmd.SetWarnings True

    Exit Function

Err_handler:
    MsgBox Err.Number & " - " & Err.Description

End Function

我在贴出的代码中弄错了 {Sql Server} 在我贴出来的时候变成了 SqlServer。 所以给出错误的完整代码如下:

Public Function main()
Dim myDB As DAO.Database
Dim myTabledef As DAO.TableDef

On Error GoTo Err_handler

Set myDB = CurrentDb
Set myTabledef = myDB.CreateTableDef("l_table")

DoCmd.SetWarnings False

myTabledef.Connect = "odbc;driver={Sql Server};" & _
    "DATABASE=myDB;SERVER=myServer;Trusted_Connection=Yes;"

myTabledef.SourceTableName = "MyTable"

myDB.TableDefs.Append myTabledef

DoCmd.SetWarnings True

Exit Function

Err_handler:
MsgBox Err.Number & " - " & Err.Description

End Function

【问题讨论】:

  • 如果我正确理解了这个问题,一个简单的方法是创建一个通用错误处理子程序,该子程序在错误号上使用 select 语句来处理引发的错误,您还可以记录错误 @987654321 @ 基本上 Err_handler: 标签/块将调用此例程传递任何参数等,但它取决于它是否是 on error goto 正在被调用

标签: sql-server-2008 ms-access odbc dao ms-access-2010


【解决方案1】:

在您尝试附加 TableDef 之前,该错误不会发生

Dim myDB As DAO.Database
Dim myTabledef As DAO.TableDef

On Error GoTo Err_handler

Set myDB = CurrentDb
scn = "odbc;driver=SqLServer;" & _
"DATABASE=myDB;SERVER=myServer;Trusted_Connection=Yes;"
Set myTabledef = myDB.CreateTableDef("l_table")

myTabledef.Connect = scn
myTabledef.SourceTableName = "Table1"
myDB.TableDefs.Append myTabledef

Err_handler:
Debug.Print Err.Number & " " & Err.Description

【讨论】:

  • 是的,没错。但是当错误确实发生时,我想在我的错误处理代码中处理它,而不是从 ODBC(或任何地方)弹出几个窗口。如果我在程序启动后失去与远程数据库的连接,也会发生错误。然后,弹出窗口会使用户在再次弹出时难以关闭应用程序。
  • 我不确定我是否理解你。示例代码在失败的行进入错误处理程序,此时可以以任何适当的方式对其进行处理。
  • @Fionnuala,我有“On Error goto”,但 Kjay 提到的对话似乎覆盖了它,甚至“DoCmd.SetWarnings False”
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多