在VBA代码中执行SQL语句

时间:2018-05-09 18:55:55

标签: sql vba ms-access outlook-vba

我正在尝试在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中运行。我只需要评估最后一行。

3 个答案:

答案 0 :(得分:2)

如果您想要一个数据表表单视图显示这些记录,您可以使用

DoCmd.OpenForm 

首先使用您想要查看的数据创建一个查询,然后使用Record Source属性将其绑定到您的表单,然后当您调用DoCmd.OpenForm传递所需的过滤器时。

我没跟踪您在查询中尝试使用SWITCH的内容(那应该是switch()函数吗?它没有括号)。但是你需要调整它来加入以使用Where语句。

答案 1 :(得分:2)

我同意上述几篇文章。

  1. 在你做任何事之前,你需要做一个strsqlQuery变量的Debug.Print!然后评估该声明。看起来不错吗?正如Matt所说,看起来你没有行继续,这会使你的SQL语句不完整(因此,计算机根本不认为它是一个查询)。
  2. 我个人的偏好是像你一样定义SQL,然后使用该SQL创建实际查询(创建查询def),然后调用该查询,因为它现在将是数据库中的实际对象。 QUERY可以显示为没有任何表单要求的数据表,但纯SQL语句不能。

    迈克尔

答案 2 :(得分:1)

删除引号。

appAccess.DoCmd.RunSQL "strsqlQuery"appAccess.DoCmd.RunSQL strsqlQuery