
Command.Execute with parameter works with ODBC provider, fails with Microsoft.Jet.OLEDB.4.0
Hello,
I'm trying to create a parametrized recordset on an Access 97 table.
It works ok if I connect to the database with the ODBC provider:
strCnn = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=D:\ymo\essais\demotrain.mdb;DefaultDir=;UID=admin;PWD=;"
But it fails with Microsoft.Jet.OLEDB.4.0:
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\ymo\essais\demotrain.mdb;"
The error code is the (famous ?) 0x80004005 that seems to occur in many
other situations...
The version of my msjetoledb40.dll is 4.00.2927.2
Any idea of why it fails?
Thanks a lot for your help,
Yves Monier
Here is the whole code I use to reproduce the problem :
Public Sub TestCreateParameter()
Dim cnn1 As ADODB.Connection
Dim cmd1 As ADODB.Command
Dim prm1 As ADODB.Parameter
Dim rst1 As ADODB.Recordset
' Open connection.
Set cnn1 = New ADODB.Connection
' cmd1.Execute fails with connection using
Provider=Microsoft.Jet.OLEDB.4.0
' but works with DRIVER={Microsoft Access Driver (*.mdb)};DBQ=...
'strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\ymo\essais\demotrain.mdb;"
strCnn = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=D:\ymo\essais\demotrain.MDB;DefaultDir=;UID=admin;PWD=;"
cnn1.Open strCnn
' Open command object with one parameter.
Set cmd1 = New ADODB.Command
cmd1.CommandText = "SELECT * FROM term WHERE language = ?"
cmd1.CommandType = adCmdText
' Get parameter value and append parameter.
Set prm1 = cmd1.CreateParameter(, adInteger, adParamInput)
cmd1.Parameters.Append prm1
prm1.Value = 1
' Create recordset by executing the command.
Set cmd1.ActiveConnection = cnn1
Set rst1 = cmd1.Execute
Do While Not rst1.EOF
MsgBox rst1!baseForm
rst1.MoveNext
Loop
rst1.Close
cnn1.Close
End Sub