如何在vba访问中的sql命令字符串中放置变量?

时间:2015-11-04 17:12:17

标签: vba access-vba

letter=65 

是表示字母表中字母(A)的变量。 我想将字母插入sql命令字符串的一部分:     sqlUrlCount = "SELECT tblMain.Name FROM tblMain WHERE (((tblMain.Name) Like '" & Chr(letter) & "*'))"

但是我收到错误:&#34;运行时错误&#39; 3075&#39;:查询表达式中字符串中的语法错误&#39;(((tblMain.Name)赞&#34;。< / p>

这可能是因为我使用的引号和双引号。但我怎么能这样做呢?

2 个答案:

答案 0 :(得分:0)

当我尝试创建一个名为&#39; Name&#39;在Access中,它抱怨说这是一个保留字 - 可能是问题的一部分。

下面的代码返回了一个SQL字符串,当我将其粘贴到查询窗口时它会起作用(注意 - 已更新&#39;名称&#39;到&#39; sName&#39;字段类型为Text)。
另请注意 - Access喜欢在所有内容周围放置括号,并且大部分时间都不需要。

Sub test()

    Dim letter As Long
    Dim sqlUrlCount As String

    letter = 65

    sqlUrlCount = "SELECT sName FROM tblMain WHERE sName Like '" & Chr(letter) & "*'"

End Sub

修改
要使用SELECT查询:

Sub Test()

    Dim sqlUrlCount As String
    Dim letter As Long
    Dim rst As DAO.Recordset

    letter = 65

    sqlUrlCount = "SELECT tblNewMain.WebAddressCompareString, " & _
        "Count(*) AS [How Many?] FROM tblNewMain " & _
        "WHERE (((tblNewMain.WebAddressCompareString) Like '" & Chr(letter) & "*')) " & _
        "GROUP BY tblNewMain.WebAddressCompareString HAVING (((Count(*))>1))"

    Set rst = CurrentDb.OpenRecordset(sqlUrlCount)

    With rst
        If Not .BOF And Not .EOF Then
            .MoveFirst
            Do
                Debug.Print .Fields("WebAddressCompareString") & " : " & .Fields(1)
                .MoveNext
            Loop Until .EOF
        End If
        .Close
    End With

    Set rst = Nothing

End Sub

如果它是DDL或DML类型的查询 - 即UPDATE,CREATE TABLE,SELECT INTO等,那么您可以使用DoCmd.RunSQL

答案 1 :(得分:0)

您的语法是正确的,因此请尝试复制粘贴结果字符串:

SELECT tblMain.Name FROM tblMain WHERE (((tblMain.Name) Like 'A*'))

进入新查询。

如果失败,请调整SQL,然后调整代码。

如果它运行,则重写代码行(无copy-n-paste),然后删除旧的代码行。