2017-10-20 1 views
0

ich die folgende Abfrage in Access VBA laufenAccess VBA Kriterien von AND und &

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;" 

Ist es möglich, diese Abfrage zu ändern, so dass, wenn der Wert für (tempStr) gesucht wird enthält eine „&“ die Datensätze zurückgegeben enthalten auch Datensätze, wobei customer_name enthält "und", und umgekehrt?

+0

Ja, das ist mit einer einfachen 'If' Aussage möglich. Bitte teilen Sie den Code, der die Abfrage aufruft, und teilen Sie ihn im Format in VBA (mit umgebenden Anführungszeichen und ähnlichem). (Sie wollen nur _John & Jack_ mit _John und Jack_, wie ich es verstehe?) –

+0

Kurze Antwort ja - Sie müssten Instr verwenden, um die & oder Und zu finden und eine zweite ähnliche Anweisung mit der zusätzlichen Suche zu erstellen, dann hinzufügen es als ein OR zu Ihrer Where-Klausel. Zwei Dinge - Access ist standardmäßig nicht case sensitive, so dass Sie die UCase nicht benötigen, und die Verwendung von * zu Beginn der Suche bedeutet, dass Indizes für das gesuchte Feld nicht verwendet werden können, wenn es sich um ein großes Recordset handelt sehr langsam. – Minty

+0

@ErikvonAsmuth - "John & Jack zu John und Jack" - das ist richtig, ja – user1936588

Antwort

2

Nur gedacht, eine einfache Alternative, die keine IF Logik für Sie verwenden.

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

Das sollte es tun.

+0

Wenn Sie dies als VBA hinzufügen (strSQL = "SELECT customerid, customer_name, Industrie FROM tblcustomersnew WHERE Ersetzen (Ucase (customer_name), &", "Und ") LIKE *" & Ersetzen (UCase (TempStr), "&", "UND") & "* '" & "ORDER BY customer_name"), bekomme ich einen Typ Mismatch Fehler in dieser Codezeile. – user1936588

+0

Sie müssen diese Anführungszeichen verdoppeln, wenn Sie es in VBA verwenden, deshalb habe ich nach dem VBA-Code gefragt. Also das: 'Ersetzen (Ucase (customer_name)," & "," Und ")' wird 'Ersetzen (Ucase (customer_name)," "&" "," "Und" ")'. Tun Sie das nur für den ersten. –

+0

Großartig - nochmals vielen Dank. – user1936588