sql-server - 传递查询的 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) - 用户的密码
- ResourceList - 在运行时的“操作数据存储”、“MS MDS 主数据”中保存在此测试中。
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
解决方案
出现语法错误是因为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。
推荐阅读
- python - 使用 AUTO ML 机器学习预测传递给 csv 文件的值
- python - minimax Alpha beta 修剪 6 * 6 Tic-Tac-Toe
- arrays - 将 wchar_t 数组转换为 C 中的 int 数组
- jsxgraph - 良好图形交互的一些问题(文本格式、交集精度、操作)
- surveyjs - Surveyjs 计算下拉列表的值
- logic-programming - 如何定义多个惩罚以最小化 clgo 中的整体?
- c - *head' 是一个指针;你的意思是使用'->'吗?为什么我会得到这个
- php - 在php输出中隐藏特定日期
- amazon-web-services - AWS API Gateway 检查 Kerberos SSO 身份验证
- java - 如何从 JTable 单元格中删除填充?