【问题标题】:VBA Access Table reference in SQL querySQL 查询中的 VBA 访问表参考
【发布时间】:2018-05-31 07:28:27
【问题描述】:

当我引用某些表名时,我在 VBA Access 中执行 SQL 代码时遇到了问题。

例如,

INSERT INTO TempTable (ClientName) SELECT DISTINCT 1_1_xlsx.ClientName FROM 1_1_xlsx'<--does not work

当我将表名从1_1_xlsx 更改为Stuff 时,代码运行良好。

INSERT INTO TempTable (ClientName) SELECT DISTINCT Stuff.ClientName FROM Stuff '<--works

我不知道为什么第一个查询会导致语法错误,而第二个代码即使引用相同的东西也能正常运行。我怀疑这应该是命名约定,但我找不到任何具体的答案。

另外,有什么方法可以使用1_1_xlsx 作为我的表名?或者我只是写错了我的查询?

【问题讨论】:

  • 如果您对名称有疑问,请始终先将它们括起来 ([1_1_xlsx])
  • 可能是 xslx 使 SQL 解析器误以为这与某些链接的 Excel 文件有关。

标签: sql ms-access vba


【解决方案1】:

试试这个:

INSERT INTO TempTable (ClientName) SELECT DISTINCT [1_1_xlsx].ClientName FROM [1_1_xlsx]

【讨论】:

    【解决方案2】:

    在许多基于 SQL 的数据库中,您不能拥有以数字开头的表名或字段名。

    我怀疑这是您的问题的根本原因。虽然 Access 会允许,但我已经看到它在过去会导致问题。

    【讨论】:

      【解决方案3】:

      问题是表名开头的数字。这很糟糕——因为它混淆了解析器。

      这是一个错误的表名,但 SQL 允许您定义表别名。而且,在这种情况下,您甚至不需要重复表名。所以,这里有两个简单的解决方案:

      INSERT INTO TempTable (ClientName)
          SELECT DISTINCT ClientName
          FROM 1_1_xlsx;
      

      或者:

      INSERT INTO TempTable (ClientName)
          SELECT DISTINCT t.ClientName
          FROM 1_1_xlsx as t
      

      没有理由使用完整的表名作为别名。这只会使查询更难编写和阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多