预期的函数/变量错误消息
Posted
技术标签:
【中文标题】预期的函数/变量错误消息【英文标题】:Expected function / variable error message 【发布时间】:2014-02-16 11:15:53 【问题描述】:我正在尝试使用 SQL 为我的访问数据库编写一个简单的追加查询。在尝试执行代码时,我得到的消息是:
编译错误。预期的函数或变量
查询是连接 4 个表并将字段粘贴到另一个表中的查询。使用标准 MS Access 查询时,它可以正常工作。然后我生成并复制了 SQL 代码(如下),但不幸的是无法让查询工作。
关于一些奇怪的事情的最后说明。与我已成功编写的所有其他 SQL 查询不同,在将 Application.DoCmd.RunSQL (st_sql) 写入 VBA 后,“L”和“(st_sql) 之间的空间由于某种原因被截断了。奇怪,对于 Whole 例程中的任何其他字符串,我成功地进行了其他追加查询,这不会发生。
下面是代码:
st_sql = "INSERT INTO[tblContactReporting03]([ID Project],[tblProjManagementPhaseHierarchy],[tblProjManagementSubPhaseHierarchy],[ID_Event],[SubTask_Hierarchy],[Project],[Sub project],[Project_Phase],[Project_Sub_Phase],[ContactFullName],[Role_Type],[type],[Event],[Effective_date],[Commitment],[Sub_task_name],[Status],[Notes])" & _
"SELECT[tblProjectMasterList].[ID Project],[tblProjManagementPhase].[Hierarchy],[tblProjManagementSubPhase].[Hierarchy],[tblContactReporting02].[ID_Event],[tblContactReporting02].[SubTask_Hierarchy],[tblProjectMasterList].[Project],[tblProjectMasterList].[Sub project],[tblProjManagementPhase].[Project_Phase],[tblProjManagementSubPhase].[Project_Sub_Phase],[tblContactReporting02].[ContactFullName],[tblContactReporting02].[Role_Type],[tblContactReporting02].[type]," & _
"[tblContactReporting02].[Event], [tblContactReporting02].[Effective_date],[tblContactReporting02].[Commitment],[tblContactReporting02].[Sub_task_name],[tblContactReporting02].[Status],[tblContactReporting02].[Notes]" & _
"FROM[tblProjectMasterListINNER JOIN ([tblProjManagementPhase] INNER JOIN ([tblContactReporting02] INNER JOIN [tblProjManagementSubPhase] ON [tblContactReporting02].[ID_Project_Sub_Phase] = [tblProjManagementSubPhase].[ID_Project_Sub_Phase]) ON ([tblContactReporting02].[ID_Project_Phase] = [tblProjManagementPhase].[ID_Project_Phase]) AND ([tblProjManagementPhase].[ID_Project_Phase] = [tblProjManagementSubPhase].[ID_Project_Phase])) ON [tblProjectMasterList].[ID Project] = [tblProjManagementPhase].[ID_Project]" & _
"ORDER BY [tblProjectMasterList].[ID Project], [tblProjManagementPhase].[Hierarchy], [tblProjManagementSubPhase].[Hierarchy], [tblContactReporting02].[ID_Event], [tblContactReporting02].[SubTask_Hierarchy];" & _
Application.DoCmd.RunSQL(st_sql)
【问题讨论】:
【参考方案1】:我建议在运行之前使用Debug.Print st_sql
,以便您能够调试构造的 SQL。
你得到的错误是因为RunSQL
是一个子,而不是一个函数,所以你需要调用它 1) 不带括号:
Application.DoCmd.RunSQL st_sql
或 2) 在它前面加上 Call 并使用括号:
Call Application.DoCmd.RunSQL(st_sql)
您可以对不需要使用返回值的函数使用语法 2。
【讨论】:
谢谢翼龙。这很有趣,因为我一直将此代码用于例程并且从未遇到过问题。也许是因为包含 4 个连接并且它更复杂..?谢谢..但是在尝试之后,我现在在连接操作中遇到语法错误..这是否仅仅意味着您的解决方案可能是正确的但是我仍然没有在 DoCmd.RunSQL 之前正确编写代码?? 嗨。只是想让你知道我发现了语法错误。现在我的问题是我收到一条关于“INSERT INTO”行的第一段的错误消息,指出该字段 [tblContactReporting03].[ID Project] 是未知的。非常奇怪,因为它确实存在并且拼写正确。 仔细检查后,您需要处理该 SQL。在 INSERT INTO 和 [tblContactReporting03] 之间需要一个空格,(
之前需要另一个空格。我看到很多地方 [table] 或 [field] 触及前面或后面的关键字。此外,请查看您的换行符——例如,您需要在 ORDER BY 之前留一个空格。
我认为SQL字符串中缺少的空格可能是这个问题的真正原因,而不是RunSQL中的括号。当您像这样构建 SQL 字符串时,您可以在 Access 中创建一个新查询,然后切换到 SQL 视图,而不是 Access 的默认 Query by Example 视图。您只会看到一个空白文本框。粘贴您的 SQL,然后切换到 DataSheet 视图进行测试。这将报告 VBA 上下文之外的 SQL 错误。通常,所有 SQL 关键字都需要用空格与表名或字段名分隔,因此您永远不会有 KEYWORD[tablename].[field].
这也可能有助于在 SQL 模式下查看您之前创建的查询,以了解您已经了解的查询的 SQL 语法。以上是关于预期的函数/变量错误消息的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在从 Java 批量执行 PostgreSQL 存储过程时收到错误消息,提示“未预期结果”?