我不知道这是否可能,但我想我会问。
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似乎认为所有错误都具有相同的重要性。
答案 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
块围绕每个调用。我相信,后一种选择是非常肮脏的黑客。