【发布时间】:2019-04-06 06:35:48
【问题描述】:
我在 mysql 表中有产品(product_id int、名称 varchar、描述文本)。
我使用最新的 ODBC 驱动程序通过参数化查询从 excel (VBA) 连接到 mysql:
dim DCONT as ADODB.Connection
set DCONT = new ADODB.Connection
DCONT.open "DSN=myDSN"
set cmd = new ADODB.command
cmd.commandtext = "SELECT product_id, name FROM products WHERE name LIKE ?"
set param1=cmd.createparameter("@strName", advarchar, adparaminput, 30, "%testvalue%"
cmd.parameters.append param1
cmd.activeconnection = DCONT
dim rsRecords = new ADODB.recordset
rsRecords.open cmd
此代码正确返回请求的记录。 当我将命令文本更改为(查询包括表中的字段描述(字段类型文本))
cmd.commandtext = "SELECT product_id, name, description FROM products WHERE name LIKE ?"
它返回无记录。 当我使用这个查询时,以同样的方式
cmd.commandtext = "SELECT * FROM products WHERE name LIKE ?"
它返回无记录。
没有参数化查询的下一个代码返回请求的记录。这意味着仅使用参数化查询返回记录存在问题。
dim DCONT as ADODB.Connection
set DCONT = new ADODB.Connection
DCONT.open "DSN=myDSN"
set cmd = new ADODB.command
cmd.commandtext = "SELECT product_id, name, description FROM products WHERE name LIKE '%testvalue%'"
cmd.activeconnection = DCONT
dim rsRecords = new ADODB.recordset
rsRecords.open cmd
请给点建议?
【问题讨论】:
-
如果我错了,请纠正我,但
WHERE name LIKE ?本质上是返回一切?或者您想要有问题的记录?。在这种情况下,请尝试Like %?% -
尝试将
name限定为显式字段标识符("name")- 我不认为它是 MySQL 或 ODBC 中的保留关键字,但我遇到了问题以前用过。 -
WHERE name Like ? = 参数(odbc 不支持命名参数)
-
字段标识符(名称)没有问题。当我想返回字段 od 类型文本时出现问题。它不返回任何记录。
标签: mysql excel vba adodb sql-parametrized-query