gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:55:48 25 4
gpt4 key购买 nike

我不知道这是否可行,但我想问一下。

Excel VBA中的ADODB连接是否有与On Error GoTo Next等效的文件?

我有一个使用ADODB.Command对象调用的存储过程。问题是,如果该存储过程中的任何一条语句引发错误,则整个进程都将关闭。是的,在某些情况下这是适当的,但就我而言,这没什么大不了的,我只是希望它继续执行其余的存储过程。
On Error GoTo 0显示SQL错误消息,并为“End”或“Debug”提供选项。
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中很好,它可以理解“Priority”标志,因此可以继续执行,但是VBA似乎认为所有错误都具有相同的重要性。

最佳答案

因为存储过程的处理全部在数据库服务器上进行,所以您必须在存储过程内部进行某种错误处理。例如,如果使用的是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

或者,您可以将存储过程分解为逻辑部分,并在VBA中将每个调用都包含 On Error GoTo Next块。我相信,后一种选择是一个相当肮脏的技巧。

关于vba - 强制忽略从ADODB到Excel VBA的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5100203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com