2017-10-20 66 views
0

我运行下面的查询在Access VBA和访问VBA标准和与

Case "Customer Name" 
     strSQL = "SELECT CustomerID, Customer_Name, Industry FROM TBLCUSTOMERSNEW WHERE ucase(Customer_Name) Like '*" & UCase(tempStr) & "*'" & " ORDER BY Customer_Name" 
     Me.lstSearchResults.ColumnCount = 4 
     Me.lstSearchResults.ColumnWidths = "1cm;7cm;12cm;" 

是否有可能使所搜索(tempStr)的值时,修改该查询包含一个“&”的返回的记录还包含customer_name包含“和”的记录,反之亦然?

+0

是的,这可以用一个简单的'If'语句。请分享调用查询的代码,并以VBA格式(包括周围的引号等)共享。 (你只是想匹配_John&Jack_到_John和Jack_,据我所知?) –

+0

简短回答是 - 你将不得不使用Instr来找到&或And,并用额外的搜索创建第二个类似的语句,然后添加它作为你的Where子句的OR。有两件事 - 默认情况下访问不区分大小写,因此您不需要UCase,并且在搜索开始时使用*表示搜索字段上的索引不能使用,如果这是一个很大的记录集,它将得到非常慢。 – Minty

+0

@ErikvonAsmuth - “John&Jack to John and Jack” - 没错,是的 – user1936588

回答

2

只是想出了一个简单的替代方案,没有为你使用任何IF逻辑。

SELECT customerid, 
     customer_name, 
     industry 
FROM  tblcustomersnew 
WHERE Replace(Ucase(customer_name), "&", "AND") LIKE '*" & Replace(UCase(tempStr), "&", "AND") & "*'" & " 
ORDER BY customer_name 

这应该做到这一点。

+0

当把这个添加为VBA时(strSQL =“SELECT customerid,customer_name,industry FROM tblcustomersnew WHERE Replace(Ucase(customer_name),”&“,”And “)LIKE'*”&Replace(UCase(tempStr),“&”,“AND”)&“*'”&“ORDER BY customer_name”),在该行代码中出现Type Mismatch错误。 – user1936588

+0

如果您在VBA中使用这些引号,则需要将这些引号加倍,这就是为什么我要求输入VBA代码的原因。所以这个:'Replace(Ucase(customer_name),“&”,“And”)'成为'Replace(Ucase(customer_name),“”&“”,“”和“”)''。只为第一个做。 –

+0

太好了 - 再次感谢。 – user1936588