开发者

Parameterised Query to Oracle in ADO Crashes Excel

I have set up a parameterised query, using ADO 2.7 inside Excel 2007. The database connection is made via ODBC and every attempt at executing the query results in Excel crashing...and when I say 'crashing', I mean it has to close and restart!

At first I thought this was a problem with my query being too long (involving multiple parameters); but I tried a very basic, single parameter, query and had the same problem... This is using positional/unnamed parameters, so perha开发者_如何学运维ps that's the problem; but I'm not sure if I can use named parameters with an Oracle query unless I wrap it up in a stored function in the schema.

My code, for what it's worth:

Open the Database (DBConnection is a custom type with DSN, Username, xPassword and Key members, the password is stored in memory with rudimentary encryption; there is a corresponding dbClose function, which I omit here.)

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

Get Data (Simplified, with one parameter, for sake of example.)

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

Testing routine that will crash 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


You're not adding the parameter you create to the Command object:

myQuery.Parameters.Append Parameter 

Just creating it doesn't add it...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜