2011-02-24 49 views
1

我不知道這是否可能,但我想我會問。強制忽略從ADODB到Excel的錯誤VBA

對於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

請發佈您的代碼... – 2011-02-24 04:10:46

+0

@Mitch完成,但我不知道它會有多大幫助。 – Margaret 2011-02-24 04:19:19

+0

「編寫它的人使用RAISERROR語句告訴用戶執行的地方。」 - eeek! – 2011-02-24 06:11:09

回答

1

由於存儲過程的處理全部發生在您的數據庫服務器上,您必須在存儲過程中進行某種錯誤處理。例如,在你的TSQL一個try/catch塊,如果你正在使用SQL Server:

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塊。我相信,後面這個選項是非常骯髒的黑客攻擊。