VBA 的 SQL 语法

Posted

技术标签:

【中文标题】VBA 的 SQL 语法【英文标题】:SQL Syntax for VBA 【发布时间】:2015-10-30 14:49:12 【问题描述】:

我一直在研究一个简单的 VBA 函数来检查当前用户是什么类型的用户,并在我的 Access db 启动时为他们打开适当的表单。我已经定义了一个 GetWindowsUserName 函数来正确获取用户名,正如我在执行 Debug.Print 时看到的那样,我使用了以下代码:

Public Function CheckUser()
Dim UserName As String
Dim SQLType As String
UserName = UserNameWindows()
SQLType = "SELECT tbl_Users.[UserType] FROM tbl_Users WHERE tbl_Users.[SOEID]='" & UserName & "';"
Debug.Print SQLType
DoCmd.RunSQL SQLType
If SQLType = "Admin" Then
DoCmd.OpenForm "frm_AdminLandingPage"
DoCmd.Close acForm, "frm_Loading"
Else
DoCmd.OpenForm "frm_LandingPage"
DoCmd.Close acForm, "frm_Loading"
End If
End Function

Debug.Print 的 SQL 语句结果如下,我也在 Access 的 SQL 视图中运行它,它运行得很好:

SELECT tbl_Users.[UserType] FROM tbl_Users WHERE tbl_Users.[SOEID]='GS429';

但是,当我尝试运行该函数时,它会导致典型的“RunSQL 操作需要一个由 SQL 语句组成的参数。”

想法?再次感谢您的帮助!

【问题讨论】:

不幸的是同样的错误。 :( RunSQL 不适用于select 查询。看到这个:***.com/questions/27421873/… 【参考方案1】:

替换这个:

SQLType = "SELECT tbl_Users.[UserType] FROM tbl_Users WHERE tbl_Users.[SOEID]='" & UserName & "';"
Debug.Print SQLType
DoCmd.RunSQL SQLType

有了这个:

SQLType=DLookup("UserType","tbl_Users","SOEID='" & UserName & "'")

【讨论】:

我不认为你需要麻烦 UserName 变量。只需使用提供该变量值的函数:DLookup("UserType","tbl_Users","SOEID=UserNameWindows()")【参考方案2】:

DoCmd.RunSQL 仅适用于“操作”查询,例如 UPDATEINSERTDELETE。它不适用于标准的SELECT。您可以打开一个连接并使用它来填充RecordSet

查看此链接:VBA New Database Connection

【讨论】:

以上是关于VBA 的 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章

vba中的sql语法错误以过滤组合框

无法弄清楚这个语法错误 VBA SQL

通过 Excel VBA 进行 SQL 查询的复杂 JOIN 子句中的语法错误

VBA代码中WHERE关键字的正确语法语法是啥

在大型 VBA/MS Access 项目中查找语法错误

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误