传递查询的 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 - 在 SQL Server 中保存数据库的名称, -
  • ArrAccountName(i( - 持有用户 ID,
  • ArrAccountPassword(i( - 用户的密码
  • 资源列表 - 在运行时"操作数据存储"、"MS MDS 主数据"中保留此测试。

RepositoryDB_Name和资源列表的内容来自/是从 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 中的查询中时,它工作正常。 [所有数据范围] 是存储在 Azure 上的 SQL Server 数据库中的视图。

我还尝试将完整的[所有数据范围]查询粘贴到SQL中,然后添加条件。 同样,当您将调试的值粘贴到 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

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

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

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

这样,Access 将意识到查询将在其他某个 DBMS 中运行,而不是尝试检查 SQL 语句是否为有效的 Access SQL。

相关内容

  • 没有找到相关文章

最新更新