我正在尝试让用户搜索Microsoft Access 2010中的表,但是SQL命令不起作用。加载和刷新表的命令是这样的:
SELECT Equipment.equipmentID, Equipment.equipmentName, Equipment.model,
Equipment.make, Equipment.equipmentLocation FROM Equipment ORDER BY Equipment.equipmentName;
这可行,但是当我尝试使用变量(或任何常规条件)时:
searchItem = Me.searchBox.Value
Me.List64.RowSource = "SELECT Equipment.equipmentID, Equipment.equipmentName,
Equipment.model, Equipment.make, Equipment.equipmentLocation FROM Equipment
WHERE Equipment.equipmentName LIKE '%searchItem%' ORDER BY Equipment.equipmentName;"
我也尝试过类似“%10%”的方法,而不是searchItem变量,但是该命令使表空白无误。我怀疑问题出在设备.eqiupmentName作为列名,但是我不太清楚这里出了什么问题。
快速浏览一下表格的外观:
答案 0 :(得分:3)
尝试一下:
Me.List64.RowSource = & _
"SELECT Equipment.equipmentID, Equipment.equipmentName," & _
" Equipment.model, Equipment.make, Equipment.equipmentLocation FROM Equipment" & _
" WHERE Equipment.equipmentName LIKE '*" & searchItem & "*'" & _
" ORDER BY Equipment.equipmentName;"
用户 rjt011000 具有有效的解决方案,但我建议在VBA(和Access)中使用&
进行字符串连接。有关+和&的说明,请参见this thread。
Access无法识别或替换SQL语句中的VBA变量。此外,在这种情况下,向LIKE运算符提供了SQL字符串值(在单引号内...在双引号内),因此即使可以在SQL内部直接引用VBA变量,Access也不内部解释任何此类内容。字符串值。
关于Access SQL LIKE
运算符,多字符匹配模式是*
而不是%
。 Access还可以识别确实遵循ANSI模式ALIKE
的运算符%
。请参见LIKE operator docs和this thread regarding ALIKE。
...'" & Replace(Replace(searchItem, "*", "[*]"), "'", "''") & "'...
为进行记录,尽管Access SQL不会替代VBA变量,但它将识别并调用公共VBA函数。通常,这样的公共功能必须在常规模块中定义,但是在表单的“记录源”查询的上下文中,有时可以调用表单模块方法。
最后一种技术...可以直接在SQL中引用表单控件的值。这可能非常方便,并减少了额外的代码,但是有一些警告:
Refresh
方法,以在值更改后强制刷新查询。EscapePattern()
),然后使用该函数包装控件引用。尽管我没有包括特殊功能的代码,但该示例执行了此操作。此类功能也可以在第一个VBA代码段中使用,以简化SQL文本的构建。Me.List64.RowSource = & _
"SELECT Equipment.equipmentID, Equipment.equipmentName," & _
" Equipment.model, Equipment.make, Equipment.equipmentLocation FROM Equipment" & _
" WHERE Equipment.equipmentName LIKE ('*' & EscapePattern(Forms![Form Name]![Control Name]) & '*')" & _
" ORDER BY Equipment.equipmentName;"
答案 1 :(得分:0)
我怀疑您没有在SQL字符串中正确设置searchItem变量。我对访问字符串串联不太熟悉,但是请尝试将searchItem与SQL字符串分开,然后检查RowSource是否具有您怀疑的值。
Me.List64.RowSource = "SELECT Equipment.equipmentID, Equipment.equipmentName,
Equipment.model, Equipment.make, Equipment.equipmentLocation FROM Equipment
WHERE Equipment.equipmentName LIKE '%" + searchItem + "%' ORDER BY Equipment.equipmentName;"