2017-10-11 131 views
0

下面的代码返回Access VBA中的语法错误,我在查询设计中使用了相同的代码,这种代码工作正常。我知道在查询设计模式与VBA查询时,SQL代码可能会有所不同,但我无法确定如何使Access代码VBA中的代码无误地运行。VBA访问中此SQL语句的语法有什么问题?

SELECT TOP 1 
    MAX(CurrentWeek.WeekEnding) AS MaxOfWeekEnding, 
    CurrentWeek.NWA, CurrentWeek.[NWA Description], CurrentWeek.Plan 
FROM 
    CurrentWeek 
INNER JOIN 
    (tblNWABasic 
INNER JOIN 
    tblProjects ON tblNWABasic.ProjectID = tblProjects.ProjectID) ON CurrentWeek.NWA = tblNWABasic.NWA 
GROUP BY 
    CurrentWeek.NWA, CurrentWeek.[NWA Description], CurrentWeek.Plan 
HAVING 
    (((CurrentWeek.[NWA Description]) Like "*direct cite*")) 
ORDER BY 
    MAX(CurrentWeek.WeekEnding) DESC; 
+0

是'CurrentWeek'一个表或查询?如果是查询,我们需要看到查询的定义,因为它可能实际上导致问题。 – this

+0

CurrentWeek是一张桌子。我想通了,我要调整代码。 – delnav222

回答

1

直接引用部分丢失括号。如下图所示修正这段代码:

Like " * [direct cite] * ")) 

上面的代码应该已经工作,但实际上结束了什么工作是:

Like ' *[direct cite]* ')) 
+0

这没有任何意义。它在一个常量字符串中 - Access不会在乎括号(至少它不会导致语法错误)。 – Andre

1

您的代码应该在双引号"不引用文字“ “包围。您还需要通过他们,在查询加倍逃避所有双引号(如改变"*direct cite*"""*direct cite*""

SELECT TOP 1 Max(CurrentWeek.WeekEnding) AS MaxOfWeekEnding, CurrentWeek.NWA, CurrentWeek.[NWA Description], CurrentWeek.Plan FROM CurrentWeek INNER JOIN (tblNWABasic INNER JOIN tblProjects ON tblNWABasic.ProjectID = tblProjects.ProjectID) ON CurrentWeek.NWA = tblNWABasic.NWA GROUP BY CurrentWeek.NWA, CurrentWeek.[NWA Description], CurrentWeek.Plan HAVING (((CurrentWeek.[NWA Description]) Like ""*direct cite*"")) ORDER BY Max(CurrentWeek.WeekEnding) DESC; 

这个子程序将简化逃逸引号的过程。简单的字符串复制到Windows剪贴板,运行EscapeDoubleQuotesInClipboard和新的字符串粘贴到您的代码。

Sub EscapeDoubleQuotesInClipboard() 
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
     .GetFromClipboard 
     .SetText Replace(.GetText, Chr(34), Chr(34) & Chr(34)) 
     .PutInClipboard 
    End With 
End Sub