【发布时间】:2021-08-04 14:32:43
【问题描述】:
我加载了一个列表对象,我正在尝试使用下面的代码对其进行过滤。 如果我在下面使用固定的 SQL 语句,代码将按预期工作。
SELECT * FROM [All Contracts] WHERE [Asset_Number] = "Q123456"
但是,尝试在搜索字符串中引入任何形式的通配符都会导致 1004 错误。
这是当前有问题的子:
Public Sub QueryData( _
ByVal form As Variant _
)
Dim ws As Worksheet
Set ws = form.Worksheet
Dim searchTxt As String
Let searchTxt = form.textBox_FirstAssetNumber.value
' Build the SQL Statment
Dim SQL As String
If searchTxt = vbNullString Then
Let SQL = "Array(SELECT * FROM [All_Contracts])"
Else
Let SQL = "SELECT * FROM [All Contracts] WHERE (((Asset_Number) Like %" & [searchTxt] & "%));"
End If
#If Testing = 1 Then
Debug.Print "SQL Satatment is: " & SQL
#End If
With ws.ListObjects.item(1).QueryTable
.CommandType = xlCmdSql
.CommandText = SQL
.Refresh
End With
End Sub
我尝试用 Where 替换 'Like',也尝试用 '%' 替换 '*' 添加括号,删除括号似乎都导致 104 错误。
如果我在查询中不使用通配符,代码和 SQL 就可以工作。
我错过了什么?
【问题讨论】: