我喜欢使用参数化查询通过ADO / Ms Access访问PostreSQL数据库。
'sql-statement: SELECT id, str FROM tbl WHERE str LIKE '<userstring>';
'str is character varying in the DB
Dim cmd As ADODB.Command
Dim param1 As ADODB.Parameter
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = con 'connection is open
cmd.CommandText = "SELECT id, str FROM tbl WHERE str LIKE @FirstParameter"
Set param1 = cmd.CreateParameter("@FirstParameter", adVarWChar, adParamInput)
param1.Value = userstring
cmd.Parameters.Append param1 ' ERROR
我必须翻译错误:“参数对象设置不正确。不一致或无效。”
答案 0 :(得分:1)
ADO使用问号指示参数。很有可能,通过使用提供程序和参数指示符的组合,无法识别参数。
PostgreSQL使用PREPARE ... EXECUTE
语法使用Dollarsigns来指示参数,但这需要您在EXECUTE
子句中再次传递参数(带有问号),因此我不建议
不幸的是,我没有便捷的Postgresql设置,但是请尝试以下操作:
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = con 'connection is open
cmd.CommandText = "SELECT id, str FROM tbl WHERE str LIKE ?"
Set param1 = cmd.CreateParameter(, adVarWChar, adParamInput, Len(userstring), userstring) 'Unnamed parameter
cmd.Parameters.Append param1