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
仅适用于“操作”查询,例如 UPDATE
、INSERT
、DELETE
。它不适用于标准的SELECT
。您可以打开一个连接并使用它来填充RecordSet
。
查看此链接:VBA New Database Connection
【讨论】:
以上是关于VBA 的 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章