强制忽略从ADODB到Excel VBA的错误

时间:2011-02-24 03:58:48

标签: vba error-handling

我不知道这是否可能,但我想我会问。

Excel VBA中的ADODB连接是否等效On Error GoTo Next

我有一个存储过程,我正在使用ADODB.Command对象进行调用。问题是,如果该存储过程中的任何一个语句抛出错误,整个进程将关闭。是的,这在某些情况下是合适的,但在我的情况下,这并不是什么大问题,我只是希望它继续执行剩余的存储过程。

On Error GoTo 0显示SQL错误消息,并为“结束”或“调试”提供选项。

On Error Resume Next跳过SQL错误消息,但以静默方式取消SQL命令并移动下一个VBA语句。

有什么想法吗?

编辑:我收到了我的代码请求。我不确定它会对你有多大帮助,但在这里:

On Error GoTo 0

ServerConnection.Open "Provider=MSDASQL.1;Persist Security Info=True;Extended Properties="DRIVER=SQL Native Client;Trusted_Connection=Yes;SERVER=DBServer;DATABASE=Database";"

Dim SqlCommand As ADODB.Command
Set SqlCommand = New ADODB.Command

With SqlCommand
    .ActiveConnection = ServerConnection
    .CommandText = "EXEC CacheTables @CacheTableType1=True"
    .CommandType = adCmdText
    .Execute
End With

ServerConnection.Close

Set SqlCommand = Nothing
Set ServerConnection = Nothing

遗憾的是,我并没有真正控制存储过程,但是它抛出错误的原因是编写它的人使用RAISERROR语句来告诉用户执行的位置。这在SQL Server中很好,它理解“优先级”标志并因此继续执行,但VBA似乎认为所有错误都具有相同的重要性。

1 个答案:

答案 0 :(得分:1)

由于存储过程的处理全部在数据库服务器上进行,因此您必须在存储过程中进行某种错误处理。例如,如果您使用的是Sql Server,则在TSQL中使用Try / Catch块:

BEGIN TRY
     { sql_statement | statement_block }
END TRY
BEGIN CATCH
     [ { sql_statement | statement_block } ]
END CATCH
[ ; ]

http://msdn.microsoft.com/en-us/library/ms175976.aspx

或者,您可以将您的sprocs分解为逻辑分区,并使用VBA中的On Error GoTo Next块围绕每个调用。我相信,后一种选择是非常肮脏的黑客。