出现数字符号 (#) 时,MS Access SELECT 语句出错

Posted

技术标签:

【中文标题】出现数字符号 (#) 时,MS Access SELECT 语句出错【英文标题】:Error in MS Access SELECT statement when number symbol (#) present 【发布时间】:2017-04-03 19:12:20 【问题描述】:

运行此最小代码时:

import pypyodbc

conn = pypyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb); Dbq=C:\temp\example.accdb;'
cur = conn.cursor()

cur.execute('SELECT [Pass#] FROM [Companies]')

我收到以下错误:

pypyodbc.DatabaseError: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.')

错误的原因似乎是“#”字符,它是 MS Access 的特殊通配符。但是,我想不出任何办法来逃避它。类似的错误表明方括号 ([]) 是转义方式,但它似乎不起作用。

我已经尝试过这样的变体,但没有成功:

cur.execute('SELECT [Pass[#]] FROM [Companies]')

cur.execute('SELECT Pass[#] FROM [Companies]')

cur.execute('SELECT [Pass\\#] FROM [Companies]')

cur.execute('SELECT Pass# FROM [Companies]')

我还应该提到 Access DB 不受我或我的公司控制,因此我无法重命名该列。

【问题讨论】:

cur.execute('SELECT [Pass\#] FROM [Companies]') 怎么样 我也尝试过这种变化。没有骰子。 @June7 是正确的。您不能“执行”选择查询。 cur.execute("SELECT [Pass#] FROM [Companies]") 是正确的——它对我有用。仔细检查列名以确保它完全匹配,例如,如果字段名实际上是 [Pass #][Pass#] 将不起作用。 【参考方案1】:

感谢 Gord Thompson 为我指明了正确的方向。长话短说,我使用的架构已经过时了,[Pass#] 字段已重命名为 [PassID]

然而事实证明,这种行为仍然让我的数据库中的其他字段感到困惑。对于将来找到此答案的任何人,以这种方式调用的 Access ODBC 驱动程序似乎会在您有错误的列名时给出错误Too few parameters. Expected N.,而不是更有用的Column name not recognized 或类似的。列名中允许使用# 字符,只要名称带有方括号即可。

【讨论】:

以上是关于出现数字符号 (#) 时,MS Access SELECT 语句出错的主要内容,如果未能解决你的问题,请参考以下文章

编译代码后出现 MS ACCESS 错误

SQL Null 语句不起作用 MS Access

库存 SQL 查询出现歧义错误,其中两个字段应相等以进行计算。 MS-ACCESS

在 Ms. Access 中生成随机字母数字密钥

MS Access 数据库 (2010) 如何从查询设计器创建临时表/过程/视图

MS ACCESS OpenRecordset 四舍五入小数