从VBA调用时,存储过程中的删除会以静默方式失败

时间:2016-09-29 13:00:28

标签: sql sql-server vba ms-access stored-procedures

我正试图通过Artikelnr(荷兰语为articleNr)从我的数据库中删除某些行。

当我尝试从访问中执行我的代码时,它不会抛出错误,但它也不会删除任何内容。

我在这里错过了什么吗?

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name =      'spVerwijderArtikel') 
    DROP PROCEDURE spVerwijderArtikel
GO 

CREATE PROCEDURE spVerwijderArtikel
    (@ArtikelNr integer)
AS 
BEGIN Transaction
    DELETE FROM artikelprijs
    WHERE ArtikelNr = @ArtikelNr

    DELETE FROM Artikel 
    WHERE ArtikelNr = @ArtikelNr

    IF @@ERROR <> 0
    BEGIN
        ROLLBACK
        RAISERROR ('Error tijdens het uitvoeren', 16 , 1)
        RETURN
    END 

    COMMIT
GO

我的代码来自访问尝试执行存储过程:

Private Sub Command2_Click()

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;" & _
  "Initial Catalog=KlantArtikelOpdracht;" & _
  "Integrated Security=SSPI;"

Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

conn.Open sConnString
Set rs = conn.Execute("EXEC spVerwijderArtikel'" & TxTArtikelNr & "'")

End Sub

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

添加声明

Alamofire.request("http://jsonplaceholder.typicode.com/users").responseJSON { (response) in

        switch response.result {
        case .success(let value) :

            print(response.request)  // original URL request
            print(response.response) // HTTP URL response
            print(response.data)     // server data
            print(response.result)   // result of response serialization

            if let JSON = response.result.value as! [String:AnyObject]!{
                print("JSON: ",JSON)
            }
        case .failure(let error):
            print("request failed with error\(error)")
        }
    }

作为存储过程的第一个语句(在SET NOCOUNT ON; 之前)。如果在执行存储过程时发生错误,那么BEGIN Transaction将被传递回VBA代码。

其他建议:

不要使用RAISERROR,因为存储过程不会返回行。

考虑使用Recordset对象ADODB.Command和正确.CommandType = adCmdStoredProc来指定ADODB.Parameter值。