首页 > 解决方案 > 传递查询的 from 子句中的语法错误

问题描述

直通 SQL 在 MS Access 2016 VBA 中失败并出现错误Syntax error in From clause,但在 Azure 上的 SQL Server 中执行正常。

我在表单的 MS Access 2016 VBA 代码中有一个名为 Qdf 的查询定义。VBA 中设置的查询是连接到 Azure 中的 SQL Server 数据库的传递查询。连接字符串是从可以正常工作的另一段代码复制而来的。Returnsrecords property = True.

当代码尝试填充 Qdf.SQL 字符串时,它会失败并显示消息

“From 子句中的语法错误”。

然后,当我在“立即(调试)”窗口中调试并打印定义 SQL 属性的字符串时,将该打印的字符串复制到 Azure 上的 SQL Server Management Studio 查询中,然后执行它就可以工作的查询。所以我的结论是查询是正确的,但不知何故,MS Access 不想理解这一点。

在下面的代码中:

RepositoryDB_Name 和 Resourcelist 的内容来自/由 Azure 中的内容构建。

Debug.Print 

"SELECT * FROM [" & RepositoryDB_Name & "].[scan].[All Data Scope] WHERE [Database Business Name] IN (" & ResourceList & ");"

结果是

"SELECT * FROM [DB_DEV].[scan].[All Data Scope] WHERE [Database Business Name] IN ('Operational Data Store', 'MS MDS Master Data')" 

当这个字符串的内容被复制到 SQL Server 中的查询中时,它可以正常工作。[All Data Scope] 是存储在 Azure 上的 SQL Server 数据库中的视图。

我还尝试在 SQL 中粘贴完整的 [All Data Scope] 查询,然后添加条件。当您将调试的值粘贴到 SQL Server Management Studio 上的查询中时,来自调试器的结果 SQL 字符串(在 FROM 子句中仅包含 SQL Server 表)在 SQL Server 上工作正常。这次我收到“查询表达式中的语法错误(缺少运算符)”消息。所以这里的查询对于 SQL Server 来说似乎还可以,但 MS Access 认为它​​是不正确的......

如何解决?这是一个错误,还是我错过了什么?

ConnStr = "ODBC;Driver=ODBC Driver 17 for SQL Server;Server=" & _
                   RepositoryServer & ";DATABASE=" & RepositoryDB_Name & ";UID=" & ArrAccountName(i) & ";PWD=" & ArrAccountPassword(i) & _
                   ";Authentication=ActiveDirectoryPassword;"
        Set Qdf = CurrentDb.CreateQueryDef("")
        Qdf.SQL = "SELECT * FROM [" & RepositoryDB_Name & "].[scan].[All Data Scope] WHERE [Database Business Name] IN (" & ResourceList & ");"
        Qdf.Connect = ConnStr

标签: sql-serverms-accessms-access-2016pass-through

解决方案


出现语法错误是因为FROM [DB_DEV].[scan].[All Data Scope]在 Access SQL 中无效。

通过在分配其属性值.Connect之前分配 QueryDef 的值来避免该错误。.SQL

Qdf.Connect = ConnStr
Qdf.SQL = "SELECT * FROM [" & RepositoryDB_Name & "].[scan].[All Data Scope] WHERE [Database Business Name] IN (" & ResourceList & ");"

这样,Access 将意识到查询将在其他一些 DBMS 中运行,并且不会尝试检查 SQL 语句是否是有效的 Access SQL。


推荐阅读