2011-08-17 73 views
0

我已經使用Excel 2007中的ADO 2.7設置了參數化查詢。數據庫連接通過ODBC進行,並且每次嘗試在Excel中執行查詢結果都會崩潰......並且當我說'崩潰',我的意思是它必須關閉並重新啓動!在ADO中對Oracle的參數化查詢崩潰Excel

起初我以爲這是我的查詢太長(涉及多個參數)的問題;但我嘗試了一個非常基本的單參數查詢,並且遇到了同樣的問題......這是使用位置/未命名的參數,所以也許就是這個問題。但我不確定是否可以使用具有Oracle查詢的命名參數,除非我將其包含在架構中的存儲函數中。

我的代碼,它的價值:

打開數據庫DBConnection是一個自定義類型與DSNUsernamexPasswordKey成員,密碼存儲在與基本的加密存儲;還有一種是相應dbClose功能,這是我在這裏省略。)

Private Function dbOpen(ByRef db As ADODB.Connection, Creds As DBConnection) As Boolean 
    On Error Resume Next 

    Set db = New ADODB.Connection 
    db.Open Creds.DSN, Creds.Username, XorC(Creds.xPassword, Creds.Key) 

    If db.State <> adStateOpen Then dbOpen = False Else dbOpen = True 
End Function 

獲取數據(簡體,一個比肩ameter,例如緣故)

Public Function GetData(ODBC As DBConnection, myParam As String) As ADODB.Recordset 
    Dim myDB As ADODB.Connection 
    Dim myQuery As ADODB.Command 
    Dim Parameter As ADODB.Parameter 

    Set myDB = New ADODB.Connection 

    If dbOpen(myDB, ODBC) Then 
     Set myQuery = New ADODB.Command 
     myQuery.ActiveConnection = myDB 
     myQuery.CommandText = "select * from sometable where id = ?" 

     Set Parameter = myQuery.CreateParameter(, adVarChar, adParamInput, 5, myParam) 

     Set GetData = myQuery.Execute 

     dbClose myDB 
    Else 
     MsgBox "Cannot connect to the database.", vbExclamation 
     Set GetData = Nothing 
    End If 
End Function 

測試例程會崩潰Excel中

Public Sub Test() 
    Dim Connection As DBConnection 
    Dim myData As ADODB.Recordset 

    With Connection 
     .DSN = "myDSN" 
     .Username = "dbUser" 
     .Key = Now 
     .xPassword = XorC("p4s5w0rd", .Key) 
    End With 

    Set myData = GetData(Connection, "AB123") ' Crashes here 
    dbClose myData 
End Sub 
+1

您不會將您創建的參數添加到Command對象:「myQuery.Parameters.Append參數」只是創建它不會添加它... –

+0

Ooohh:P哎呀!...謝謝:) – Xophmeister

+0

添加我的評論作爲答案。 –

回答

1

你不加入,你創建的Command對象的參數:

myQuery.Parameters.Append Parameter 

只是創建它不會添加它...