在 VBA 代码中执行 SQL 语句
Posted
技术标签:
【中文标题】在 VBA 代码中执行 SQL 语句【英文标题】:Execute a SQL statement inside VBA Code 【发布时间】:2018-05-09 18:55:55 【问题描述】:我正在尝试在 VBA 代码中执行 SQL 查询。该查询在 MS Access 中运行,并要求用户输入 Customer_Name 和 Part_Number 的值
我所做的是在 Outlook 中编写 VBA 代码,这样我们就可以运行宏来执行 Outlook 中的查询。我目前的代码一直有效,直到 DoCmd.RunSQL 部分的最后一行。我认为我的语法不正确。我需要告诉它运行上面列出的 SQL 字符串:
Public Sub AppendAllTables()
Part_Number = InputBox("Enter Part Number")
Customer_Name = InputBox("Enter Customer Name")
Dim strsqlQuery As String
Dim Y As String
Y = "YES, Exact Match"
Dim P As String
P = "Possible Match - Base 6"
Dim X As String
X = "*"
strsqlQuery = "SELECT Append_All_Tables.Customer,
Append_All_Tables.CustomerCode, Append_All_Tables.PartNumber,
Append_All_Tables.Description, Append_All_Tables.Vehicle, SWITCH" &
Customer_Name & " = Append_All_Tables.PartNumber, " & Y & ", LEFT(" &
Part_Number & ",12) = LEFT(Append_All_Tables.PartNumber,12)," & Y & ",
LEFT(" & Part_Number & ",6) = LEFT(Append_All_Tables.PartNumber,6)," & P
& ") AS Interchangeability FROM Append_All_Tables WHERE" & Customer_Name
& "Like " & X & Customer_Name & X & "AND
LEFT(Append_All_Tables.PartNumber,6) = LEFT(" & Part_Number & ",6);"
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "path.accdb"
appAccess.DoCmd.RunSQL "strsqlQuery"
End Sub
请注意,出于隐私考虑,路径已更改。 SQL 代码已在 Access 中运行。我只需要评估最后一行。
【问题讨论】:
这是SELECT
声明。当你运行它时,你期望会发生什么?
我正在尝试让数据表视图(满足这些要求的所有记录的列表)出现在访问权限中。该代码应该是开放访问,并根据vba代码中的sql运行查询
嗯...您不能只显示从 SQL 语句填充的数据表。您可以创建一个新查询,然后在数据表视图中打开它,或者编辑一个现有查询,然后打开它。或者,如果你想做一些非常花哨的事情,你可以有一个可以在数据表视图中显示任何 SQL 语句的表单(就像我分享的 here),但这很复杂。
【参考方案1】:
如果你想让数据表表单视图显示这些记录,你可以使用
DoCmd.OpenForm
首先使用您要查看的数据创建一个查询,然后使用Record Source
属性将其绑定到您的表单,然后在您调用DoCmd.OpenForm
时传入您想要的过滤器。
我没有按照您在查询中尝试对SWITCH
执行的操作(这应该是switch()
函数吗?它没有括号)。但您需要调整它以加入以使用 Where
语句代替。
【讨论】:
【参考方案2】:我同意上面的几个帖子。
-
在执行任何操作之前,您需要对 strsqlQuery 变量执行 Debug.Print!然后评估该陈述。看起来对吗?正如 Matt 所说,您似乎没有续行,这会使您的 SQL 语句不完整(因此,计算机根本不认为它是一个查询)。
我个人的偏好是像您一样定义 SQL,然后使用该 SQL 创建实际查询(创建查询定义),然后调用该查询,因为它现在将成为数据库中的实际对象。 QUERY 可以在没有任何形式要求的情况下显示为数据表,但纯 SQL 语句不能。
迈克尔
【讨论】:
【参考方案3】:去掉引号。
appAccess.DoCmd.RunSQL "strsqlQuery"
到 appAccess.DoCmd.RunSQL strsqlQuery
【讨论】:
我仍然收到错误消息。即使进行了更改,调试器也再次突出显示了这一行。错误说:“runSQL 操作需要一个由 SQL 语句组成的参数。”你知道我是否不允许在上面声明为字符串并在此处调用它? @Analyst123456789 如果您的字符串完全按照您在帖子中的方式分配,那么我看不到您的代码甚至可以编译;它缺少行继续`_`。 它确实包含续行,但我将它们从中取出,以便我可以将它连续写在一行上。字符串本身正在工作,它只是有问题的最后一行。我也尝试将 appAccess.DoCmd.Execute 与更新 sql 查询一起使用,但这也不起作用。 您发布的 SQL 字符串将不起作用。 How to debug dynamic SQL in VBA 。请发布工作代码和Debug.Print strsqlQuery
@Analyst123456789的结果以上是关于在 VBA 代码中执行 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章
vba 判断一个单元格中是不是包含某个字符串 有则执行后面的语句
如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询
EXCEL VBA 窗体显示期间不执行下面代码,也不影响操作工作表?