【问题标题】:VBA data layer error handlingVBA 数据层错误处理
【发布时间】:2011-06-19 21:20:57
【问题描述】:

我有一些旧版 Excel 文件,其中包含对存储过程和数据库连接的大量调用,所有这些都以旧方式使用记录集完成...

由于在 VBA 中没有 try-catch-finally 的概念,就像在 .NET 中一样,是否有任何最佳实践可应用于拥有更可靠的数据访问层?我想有一个很好的例子来说明如何打开连接,执行需要一些参数的存储过程,然后在任何成功或错误的情况下,关闭连接并释放资源。

【问题讨论】:

  • @Charles Williams 已经提供了一个很好的答案。以下是一些有助于充实 EH 在 Excel 中的一般工作方式的链接。简而言之,它的 syntax 与 e.g. 完全不同。 .NET,但所涉及的概念大多相同。例如,请参阅stackoverflow.com/questions/4429965/…。你也可以做 RAII,例如C++。请参阅:stackoverflow.com/questions/3792134/…(RAII 并未直接在 .NET 中使用,但其背后的概念已包含在 IDisposable 和“使用”中。)
  • 你可以在 VBA 中模拟一个 TRY CATCH 块请看这里stackoverflow.com/q/30991653/4413676

标签: excel vba vb6 error-handling


【解决方案1】:

我现在实际上使用了不同的方法,我创建了一个 .NET 托管数据层并将其导出为 COM 类,按照此处的说明:Calling .NET from VBA 这样我必须部署和注册 COM 程序集以及excel 文件,我承认这有点痛苦,但至少我可以以适当的方式处理数据访问并使用 C#、ADO.NET 等......

【讨论】:

    【解决方案2】:

    在 VBA 中,您必须使用 On Error 块:它很乱但可以工作

    On Error Goto ConnectionFail
    ' open connection
    on Error GoTo 0
    ...
    On Error GoTo QueryFail
    ' execute querys etc
    on Error goto 0
    ...
    Cleanup:
    ' close connection destroy objects etc
    Exit Sub
    ConnectionFail
    On Error GoTo 0
    ' handle failure
    GoTo Cleanup
    QueryFail
    On Error GoTo 0
    ' handle failure
    GoTo Cleanup
    End Sub
    

    【讨论】:

    • @Davide,“On Error Goto 0”“关闭”之前的“On Error Goto
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2017-08-24
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多