如何通过ODBC查询名称有问号的MS Access列?

时间:2009-09-11 08:04:50

标签: ms-access odbc

我有一个MS Access数据库(Access 2002,用于记录)。它有一个列,其名称包含一个问号,例如,表“Users”,其列为“uid”和“isAdmin?”。我需要通过ODBC连接到此数据库,并按以下行查询此列:

select [uid], [isAdmin?] from Users order by [isAdmin?];

如何转义列名中的问号,以便MS Access ODBC驱动程序不认为它是查询参数?此查询不使用任何参数,因此如果我完全禁用它们就没问题。

一些限制:

  • 我无法轻易更改列名。
  • 我不能轻易使用除ODBC以外的其他东西进行连接,但如果我无法让ODBC表现出来,这可能是我的后备计划。
  • 我不能只说select * from Users - 它仍然会在命令上窒息(这在实际查询中很复杂,所以真的需要在SQL中完成)。

我尝试过的东西不起作用:

  • select [uid], '[isAdmin?]' from Users; - 这使得第二列成为字符串“[isAdmin?]”
  • select [uid], ['isAdmin?'] from Users;
  • select [uid], [isAdmin\?] from Users;
  • select [uid], [isAdmin\?] {escape '\'} from Users; - 其他任何逃避字符都不起作用。
  • select [uid], { [isAdmin?] } from Users;

编辑:我应该澄清一下,除了通过ODBC(或ADO或DAO或其他任何东西)之外我根本无法轻易更改数据库,但这会有点棘手,在那一点上,我可以通过那些运行查询。

5 个答案:

答案 0 :(得分:3)

这似乎是一种狡猾的解决方案,但听起来你没有得到任何合理的帮助来解决这个问题。

您是否具有MDB结构的写入权限?你有独立访问的副本吗?

如果是这样,请创建一个新的空白MDB文件(完成后将放弃此文件)。从新MDB创建一个链接表,并使用它来编写一个保存的QueryDef,它将该字段别名化。然后使用DoCmd.TransferDatabase将其从临时MDB导出到真实MDB中。

这假设您具有通过ODBC从应用程序访问的MDB的SMB文件系统访问权限。

另一种选择,因为在MDB中获得具有适当别名的视图是一次性交易,将使用OLEDB执行此操作,假设您具有对MDB的OLEDB访问权。

答案 1 :(得分:2)

我会使用pass through queries并重命名查询中的字段。通过类似

之类的内容创建传递
 select [uid], [isAdmin?] AS ISADMIN from Users order by [isAdmin?]

(或本机SQL中的任何内容),
然后在Access中,只引用该查询

select Uid, ISADMIN from qpstUsers

答案 2 :(得分:2)

另一种选择是创建Users表的视图并重命名视图中的违规列。

答案 3 :(得分:1)

我遇到了同样的问题。 (使用SQLdeveloper中的MS Access驱动程序)。

ACCESS SQL不喜欢'"'如在 不喜欢" * val *" 然后我换成了 不喜欢' * val *'

答案 4 :(得分:0)

试试这个“IsAdmin?”

双重引号适用于我的情况,其中有人将该列命名为:Lead#

我的where子句随后成为“Lead#”='123'

的地方

我把它拿回来......

其中([Lead#] = 123)

这就是救我的。请注意该子句周围的括号以及参数123周围缺少单引号。希望这会有所帮助。