Moin, ich habe ein kleines Suchformular erstellt (oder habe es zumindest versucht) nun möchte ich aber in meinen Produkten in jedem Feld suchen, nicht nur in dem das in meinem SQL angegeben ist (siehe unten) und auch mit Stichwörtern, und nicht nur 1:1 Begriffen.
Also zb: Ich habe zwei Artikel die in dem Feld "Beschreibung" "schwarz" stehen haben, suche ich jetzt nach schwarz finde ich keinen von denen, weil es 1:1 der genaue Text aus dem Feld Beschreibung sein muss.
Kopiere ich den Text in das Feld finde ich den passenden Artikel.
Kopiere ich den genauen Text aus einem anderen Feld, sucht er gar nichts.
Sobald ich auf den suchen Button klicke, ohne eine Eingabe im Suchfeld, zeigt er alles an (so soll es sein und das ist gut)
Code: Private Sub cmdSuche_Click()
Dim strSQL As String
If Len(Me!txtSuche) > 0 Then
strSQL = "SELECT * FROM tblArtikel WHERE " & " Beschreibung LIKE '" & Me!txtSuche & "'"
Else
strSQL = "SELECT * FROM tblArtikel"
End If
Me!sfmArtikelsuche.Form.RecordSource = strSQL
End Sub
Beispiel angehangen, bitte um Hilfe.
Suchfeld (Test) - Kopie.zip
Hallo,
Du musst den Joker (*) mit einbauen.
Ändere den Code wie folgt:
Zitat von: undefinedPrivate Sub cmdSuche_Click()
Dim strSQL As String
If Len(Me!txtSuche) > 0 Then
strSQL = "SELECT * FROM tblArtikel WHERE Beschreibung LIKE '*" & Me.txtSuche & "*'"
Else
strSQL = "SELECT * FROM tblArtikel"
End If
Me!sfmArtikelsuche.Form.RecordSource = strSQL
End Sub
Die Verkettung der Beschreibung mit & ist überflüssig.
Warum verwendest Du hier ein Unterformular, das ist doch nicht notwendig.
Hallo,
"LIKE" ohne Joker ist wie "=", - hat Klaus dir schon gezeigt.
Zitatnun möchte ich aber in meinen Produkten in jedem Feld suchen, nicht nur in dem das in meinem SQL angegeben ist
Das geht nicht so einfach, - SQL will schon wissen wo es suchen soll.
Entweder erweiterst du die WHERE-Klausel um die weiteren Felder
... WHERE Beschreibung LIKE '*" & Me.txtSuche & "*' "
& "OR EinAnderesFeld LIKE '*" & Me.txtSuche & "*' " usw.oder du nimmst eine Abfrage auf die tblArtikel her, in der du die
zu durchsuchenden Felder zu einem zusammen führst
SELECT Feld1 & Feld2 & Feld3 As Suchfeld
FROM tblArtikelund filterst so
... WHERE Suchfeld LIKE '*" & Me.txtSuche & "*' "gruss ekkehard
Guten Morgen, das funktioniert super, eine letzte Frage:
Wie kann ich es einstellen, dass das Suchfeld die groß und kleinschreibung ignoriert?
Suche ich zb. nach klebstoff findet es nichts, aber suche ich nach Klebstoff findet es die passenden Ergebnisse.
Zitat von: TerracottaCSV am März 09, 2022, 08:41:13Guten Morgen, das funktioniert super, eine letzte Frage:
Wie kann ich es einstellen, dass das Suchfeld die groß und kleinschreibung ignoriert?
Suche ich zb. nach klebstoff findet es nichts, aber suche ich nach Klebstoff findet es die passenden Ergebnisse.
Nur mal grob skizziert: Indem du sowohl den Inhalt von Me.txtSuche vorher in entweder durchgängig Groß- oder Kleinschreibung konvertierst (Stichwort UCase oder LCase in VBA) ALS AUCH die Feldinhalte wo du suchst im SQL ebenso
(auch via LCASE und UCASE.. in Jet-SQL wie es aussieht, ich brauchte das bisher selten).
Also (ungetestet)
.. WHERE UCASE(Suchfeld) LIKE '*" & UCase(Me.txtSuche.Value) & "*' "
Hallo,
ZitatWie kann ich es einstellen, dass das Suchfeld die groß und kleinschreibung ignoriert?
In der Regel wird ohne besondere Maßnahmen die Groß und Kleinschreibung ignoriert. Wenn das nicht der Fall ist, so ist ganz oben in einem Modul (dort wo der Code zum Suchen ist) folgende Zeile(n) anzulegen:
Option Compare Database 'ignoriert Groß/Kleinschreibung
Option Explicit 'zwingt zur VariablendeklarationDie Umwandlung in Großbuchstaben braucht es nicht.
[quote author=MzKlMu link=msg=154990 date=1646831156]
Option Compare Database 'ignoriert Groß/Kleinschreibung
Option Explicit 'zwingt zur Variablendeklaration
Die Umwandlung in Großbuchstaben braucht es nicht.
[/quote]
Das geht natürlich auch.. aber gilt modulweit wenn ich nicht irre?
Kann man bei einem expliziten Textvergleich aber "ausschalten"
StrComp(strPW, .Controls("txtPW").Text, VbCompareMethod:=vbBinaryCompare)
Mal ein paar Anmerkungen zu diesem Thread:
Textvergleiche in JET-/ACE-SQL sind immer case insensitive (bei einer üblichen Sortierreihenfolge). D.h. Groß-/Kleinschreibung spielt keine Rolle. Was
@TerracottaCSV als Problem berichtet darf normalerweise gar keines sein. Hier wäre eine weitere Analyse der Ursache oder eher eine Überprüfung des Sachverhalts an sich angebracht.
Option Compare ... in einem Modul wirkt sich auf den VBA Code in dem Module aus, aber nicht auf Vergleiche in SQL-Ausdrücken, die von der JET-/ACE-Engine durchgeführt werden; auch dann nicht wenn der SQL-Text in den jeweiligen Modul zusammengesetzt wurde.
Option Compare Database bedeutet
nicht zwingend, das Text-Vergleiche case insensitive durchgeführt werden, sondern dass die Sortierreihenfolge der Datenbank für den Vergleich verwendet wird. - De facto bedeutet das im deutschsprachigen Raum allerdings einen case-insensitiven Vergleich, weil es keine deutsche/westliche Sortierreihenfolge gibt, die Groß-/Kleinschreibung unterscheidet.
Die Lösungsansätze mit
UCASE etc. im SQL-Kriterium würden zwar funktionieren (wenn es denn überhaupt ein Problem gäbe!), aber sie sind auch Gift für die Performance der Abfragen (https://codekabinett.com/rdumps.php?Lang=1&targetDoc=abfrage-performance-tuning). - Hier ist das allerdings von untergeordneter Bedeutung, da das LIKE ** eh schon eine Indexnutzung vereitelt.
Danke an alle. Habe es mit LCASE gelöst. Warum es ohne LCASE nicht funktioniert kann ich nicht sagen.
Ich verwende ein Unterformular in einem Hauptformular welches einfach nur die Tabelle "filtert"
Mein Plan ist aber schon es auf eine Abfrage zu ändern, weil ich die Werte später mit einem Button zwischenspeichern möchte um sie in einem anderen Formular weiter zu verwenden.
Schönes Wochenende an alle!