Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Suchformular sucht nur nach genauen Phrasen im gleichen Feld

Begonnen von TerracottaCSV, März 08, 2022, 15:33:11

⏪ vorheriges - nächstes ⏩

TerracottaCSV

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.
Sie dürfen in diesem Board keine Dateianhänge sehen.

MzKlMu

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.
Gruß Klaus

Beaker s.a.

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 tblArtikel
und filterst so
... WHERE Suchfeld LIKE '*" & Me.txtSuche & "*' "
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

TerracottaCSV

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.

oliver1974

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) & "*' "

MzKlMu

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 Variablendeklaration

Die Umwandlung in Großbuchstaben braucht es nicht.
Gruß Klaus

oliver1974

[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?

Beaker s.a.

Kann man bei einem expliziten Textvergleich aber "ausschalten"
StrComp(strPW, .Controls("txtPW").Text, VbCompareMethod:=vbBinaryCompare)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

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. - Hier ist das allerdings von untergeordneter Bedeutung, da das LIKE ** eh schon eine Indexnutzung vereitelt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

TerracottaCSV

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!