簡體   English   中英

執行sybase存儲過程時出現VBA錯誤

[英]VBA error when executing a sybase stored procedure

我有以下代碼通過VBA在Sybase中執行存儲過程。

Sub GetInfo()

    Dim rstRUB As ADODB.Recordset
    Dim strRUB As String
    Dim strcnn As String
    Dim productType As String
    Dim DealId As String

    strcnn = "DSN=...;DATABASE=...;UID=...;PWD=...;"
    Set cnn = New ADODB.Connection
    cnn.Open strcnn

    Set rstRUB = New ADODB.Recordset

    Set ws = Workbooks("BODN_CPOTC.xls").Sheets("BODN_CPOTC")

    Dim row As Long
    row = 5

    While ws.Cells(row, 1) <> ""
        productType = ws.Cells(row, 1)
        DealId = ws.Cells(row, 3)



        Set cmd = New ADODB.Command
        With cmd
        .CommandText = "[Proc_BO_Deriv_AFOFLD]"
        .ActiveConnection = cnn
        .CommandType = adCmdStoredProc

        '.Parameters.Append .CreateParameter("@valueD", adDate, adParamInput, , strDate)
        '.Parameters.Append .CreateParameter("@maturityD", adDate, adParamInput, , Format$("20100504", "YYYYMMDD"))
        .Parameters.Append .CreateParameter("@tipoProduto", adVarChar, adParamInput, 9, productType)
        .Parameters.Append .CreateParameter("@dealId", adInteger, adParamInput, 0, DealId)
        End With


        rstRUB.Open cmd.Execute

        If rstRUB.EOF = False Then
            ws.Cells(row, 5) = rstRUB.Fields(0).Value
            ws.Cells(row, 6) = rstRUB.Fields(1).Value
            ws.Cells(row, 7) = rstRUB.Fields(2).Value
            ws.Cells(row, 8) = rstRUB.Fields(3).Value
            ws.Cells(row, 9) = rstRUB.Fields(4).Value
            ws.Cells(row, 10) = rstRUB.Fields(5).Value
            ws.Cells(row, 11) = rstRUB.Fields(6).Value
            ws.Cells(row, 12) = rstRUB.Fields(7).Value
            ws.Cells(row, 13) = rstRUB.Fields(8).Value
            ws.Cells(row, 14) = rstRUB.Fields(9).Value
            ws.Cells(row, 15) = rstRUB.Fields(10).Value
            ws.Cells(row, 16) = rstRUB.Fields(11).Value
            ws.Cells(row, 17) = rstRUB.Fields(12).Value
            ws.Cells(row, 18) = rstRUB.Fields(13).Value
            ws.Cells(row, 19) = rstRUB.Fields(14).Value
            ws.Cells(row, 20) = rstRUB.Fields(15).Value
            ws.Cells(row, 21) = rstRUB.Fields(16).Value
            ws.Cells(row, 22) = rstRUB.Fields(17).Value
            ws.Cells(row, 23) = rstRUB.Fields(18).Value
            ws.Cells(row, 24) = rstRUB.Fields(19).Value
            ws.Cells(row, 25) = rstRUB.Fields(20).Value
            ws.Cells(row, 26) = rstRUB.Fields(21).Value
            ws.Cells(row, 27) = rstRUB.Fields(22).Value
            ws.Cells(row, 28) = rstRUB.Fields(23).Value
            ws.Cells(row, 29) = rstRUB.Fields(24).Value
            ws.Cells(row, 30) = rstRUB.Fields(25).Value
            ws.Cells(row, 31) = rstRUB.Fields(26).Value
            ws.Cells(row, 32) = rstRUB.Fields(27).Value
        Else
            ws.Cells(row, 5) = "Deal Not Found"
        End If


        row = row + 1
    Wend


End Sub

第一個存儲過程執行效果很好,但是第二個執行時

rstRUB.Open cmd.Execute

程序沒有結束

我已經准備好切換參數(第一個和第二個),程序不會在第二次結束。

你知道我做錯了什么嗎?

提前致謝!

嘗試set rstRUB = cmd.execute而不是rstRUB.Open cmd.Execute

不知道為什么Set rstRUB = cmd.Execute將給出編譯錯誤...

您也可以嘗試這樣的通話:

rstRUB.Open cmd

無需在Open命令中調用cmd的execute方法,因為Open命令會觸發查詢執行。 這是記錄集打開命令的鏈接: http : //msdn.microsoft.com/zh-cn/library/ms675544(VS.85).aspx

在增加行數以准備下一個循環之后,還可以幫助清除cmd和rstRUB對象的內存。

Set cmd = Nothing
Set rstRUB = Nothing

我建議您為命令對象設置timeout屬性:

http://msdn.microsoft.com/en-us/library/ms678265(v=VS.85).aspx

至少您會找回應用程序。

我懷疑您的參數有誤-名稱,類型或要傳遞的參數數; 更糟糕的是,SQL中有錯誤。 不幸的是,某些OLEDB數據庫提供程序及其關聯的驅動程序不能很好地實現錯誤處理,並且我懷疑除了“超時”消息外,您從Connection對象的錯誤收集中將一無所獲。

因此,您剩下的任務是捕獲SQL和參數集合,並將其粘貼到數據庫服務器具有的任何SQL開發窗口中:VBA的參數設置為在嘗試手動運行SQL時會被無形地糾正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM