sql where子句变量

时间:2017-10-31 07:07:47

标签: vba ms-access

我正在使用VBA和SQL。我的VBA看起来像

Dim SystemLookup As String
Dim SqlString As String


If IsNull(Me!SystemLookup) Then
   Me!SystemLookup = ""
Else
    SystemLookup = Me!SystemLookup
End If

SqlString = "SELECT TblField.*, TblOrigin.SystemID" _
        & " FROM TblField INNER JOIN TblOrigin ON TblField.OriginID = TblOrigin.OriginID " _
        & " WHERE (((TblOrigin.SystemID) = " & systemlookup )) ""

Me.RecordSource = SqlString
End Sub

我对where子句的包围是错误的,但我不确定如何解决。任何建议(Systemlookup是从表单传递的变量)

2 个答案:

答案 0 :(得分:1)

您需要将括号放在字符串中,而不是变量。

试试这个:

SqlString = "SELECT TblField.*, TblOrigin.SystemID" _
            & " FROM TblField INNER JOIN TblOrigin ON TblField.OriginID = TblOrigin.OriginID " _
            & " WHERE (((TblOrigin.SystemID) = " & systemlookup  & ")) "

答案 1 :(得分:1)

你错过了&符和双引号并且有一个额外的开口括号。在这个简单的查询中不需要括号。

SqlString =  "SELECT TblField.*, TblOrigin.SystemID" _
        & " FROM TblField INNER JOIN TblOrigin ON TblField.OriginID = TblOrigin.OriginID " _
        & " WHERE TblOrigin.SystemID = " & systemlookup  & ";"

当您需要对条件进行分组时,您将括起WHERE子句。 例如,如果您想知道产品是否在两个日期之间发货,或者产品是否未发货,那么您可以将其包括在内。

这三个例子都是有效的:

  

地点([发货日期]> =#10/28/2017#和[发货日期]< =#10/30/2017#)或[发货日期]为空

     

地点([发货日期]> =#10/28/2017#和[发货日期]< =#10/30/2017#)或([发货日期]为空)

     

在哪里(([发货日期]> =#10/28/2017#和[发货日期]< =#10/30/2017#)或([发货日期]为空))