【问题标题】:ODBC select query with text field return no record带有文本字段的 ODBC 选择查询不返回任何记录
【发布时间】: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


【解决方案1】:

解决方案 -> 需要升级到最新的 MySQL ODBC 8.0 ANSI Driver,版本 8.00.13.00,然后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多