Seite 1 von 1
[gelöst]Suche mit schreibfehlern
Verfasst: Di, 09.10.2012 13:43
von tim9394
Hallo zusammen,
meine Frage: Ich such in per Formular, dass auf den SQL Befehl
SELECT * FROM "Archiv" WHERE "Autor" = :Autor OR "Nummer" = :Nummer OR "Stückname" = :Stückname OR "Regie" = :Regie OR "Bühnenbild" = :Bühnenbild OR "Medium" = :Medium OR "Bühne" = :Bühne OR "Intendanz" = :Intendanz
folgt. Nun möchte ih z.b. auch mit klein/Großschreibung suchen. sprich ich will nicht alles genau so eingeben müssen wie es in der Tabelle steht. Ich hoffe ihr versteht das so ungefähr...
Danke
Tim
Re: Suche mit schreibfehlern
Verfasst: Di, 09.10.2012 14:20
von juetho
tim9394 hat geschrieben:Ich hoffe ihr versteht das so ungefähr...
Es geht so grade noch. Es gibt mehrere Möglichkeiten der Suche nach Ähnlichkeit. Für Groß-/Kleinschreibung bietet es sich an, alle Vergleichswerte mit der Funktion LOWER() in Kleinbuchstaben zu setzen. Die WHERE-Klausel kennt die LIKE-Bedingung mit Platzhaltern. Außerdem sind unter Umständen reguläre Ausdrücke möglich (theoretisch auch bei HSQLDB und Base, aber die Hilfe schweigt sich, wie RobertG im Handbuch schreibt, dazu weitgehend aus).
Die genaue Schreibweise und das, was zur Verfügung steht, hängt vom verwendeten Datenbanksystem ab. Du benutzt offensichtlich das BASE-eigene HSQL, also solltest du alle Einzelheiten im
Base-Handbuch finden.
Nebenbei:
Ich such in per Formular, dass auf den SQL Befehl ... folgt.
Etwas mehr sprachliche Sorgfalt wäre nicht schlecht; man kann einen Beitrag auch mit der Vorschau kontrollieren, ob andere ihn so verstehen wie er gemeint ist. Hier ging es noch, weil der restliche Text genau genug war. Aber du solltest auch an die Leser denken; die sollen dir schließlich helfen. Danke! Jürgen
Re: Suche mit schreibfehlern
Verfasst: Di, 09.10.2012 15:39
von RobertG
Um das eben kurz in die entsprechende Form zu bringen:
Code: Alles auswählen
SELECT "Name" FROM "Tabelle1" WHERE LOWER ( "Name" ) LIKE ( '%' || LOWER ( :Name ) || '%' )
Du sogst damit dafür, dass sowohl der Inhalt des Feldes als auch Deiner Eingabe klein geschrieben wird. Außerdem kann der Inhalt irgendwo im Bereich des Feldes "Name" auftauchen. Wenn Du allerdings zu viele Felder und zu kurze Eingaben wählst, dann kann das zu einer ganzen Reihe Datensätze führen, die Du gar nicht haben willst.
Was leider noch kein Feature ist: Die entsprechenden Suchbegriffe werden im Ergebnis nicht (z.B. farblich) markiert. Aber wenn irgendwann einmal wieder Entwickler Base vorantreiben kann das ja noch werden.
Gruß
Robert
Re: Suche mit schreibfehlern
Verfasst: Mi, 10.10.2012 16:32
von tim9394
Hey,
das mit dem farblichen markieren wäre ja mal klasse... aber leider noch ein Traum...
Hab deinen Befehl mal auf meine Suche angewendet und ich finde egal was ich eingebe (sprich ob genau den Titel/oder auch sowas wie "posamcnvoe0q3") immer alle Datenätze.
Was soll ich tun?
Re: Suche mit schreibfehlern
Verfasst: Mi, 10.10.2012 21:12
von RobertG
Dass Du wirklich alles findest liegt in der Natur der Abfrage von mehreren Feldern.
Die Abfrage sucht ja alles, was passend zu der Eingabe ist. Angenommen, Du lässt eingaben leer, so erzeugt ( '%' || LOWER ( :Name ) || '%' ) daraus eine Abfrage nach allen Namen. '%' steht für beliebig viele Zeichen. Und ("Name") LIKE (alle möglichen Zeichen) ergibt nun einmal alle Datensätze. Ob da nun etwas steht oder nicht.
Jetzt hast Du Deine Ursprungsabfrage auch noch so aufgebaut, dass Du die Bedingungen mit "OR" verknüpfst. Das heißt, dass nur eine leere Parametereingabe dazu führt, dass alle Datensätze angegeben werden.
Gruß
Robert
Re: Suche mit schreibfehlern
Verfasst: Do, 11.10.2012 11:56
von tim9394
Ok verstehe, mein Plan ist jetzt ein Formular zu entwerfen welches für jede Kategorie eine Schaltfläche aufweist. Diese Schaltfläche soll dann nur noch eine SQL Abfrage durch führen. Dazu schreib ich pro Kategorie eine Abfrage und weise jede Schaltfläche dann einer zu. ist das so möglich um meine Such im Formular zu gestalten?
Gruß
Tim
Re: Suche mit schreibfehlern
Verfasst: Fr, 12.10.2012 09:49
von RobertG
Hallo Tim,
vielleicht hilft Dir der folgende Code etwas aus der Patsche:
Code: Alles auswählen
SELECT "Name" FROM "Tabelle1"
WHERE LOWER ( "Name" ) LIKE ( '%' || IFNULL ( NULLIF ( LOWER ( :Name ), '' ) ,'§§') || '%' )
Mit "LIKE" waren wir ja schon im Klaren. Jetzt muss der Abfrage nur ein Ausdruck untergeschoben werden, der auf gar keinen Fall vorkommt. Dies sollen die beiden Paragraphen sein ('§§'). Zuerst habe ich ausprobiert, ob direkt auf den Parameter mit der Funktion IFNULL zugegriffen werden kann. Der Parameter gibt aber nicht NULL, sondern ein leeres Feld wieder (''). Das leere Feld wird durch 2 direkt nacheinander gesetzte Hochkommata (über dem # auf der Tastatur) angesprochen. Jetzt habe ich einem eventuelle leeren Feld durch die Funktion NULLIF den Wert NULL zugewiesen. Das Ergebnis: Gebe ich bei dem Parameter nichts ein, so wird auch nichts in der Abfrage angezeigt.
Gruß
Robert
Re: Suche mit schreibfehlern
Verfasst: Di, 16.10.2012 10:17
von tim9394
Hallo Robert,
sry dass ich mich erst jetzt melde. Hatte lange frei...
Hat wunderbar funktioniert!!! Vielen Dank!!! Ich denke damit kann das Thema geschlossen werden... Falls noch was is hab ich ja mit euch Profis an der hand
Danke nochmal!
Gruß
Tim
Re: Suche mit schreibfehlern
Verfasst: Di, 16.10.2012 10:45
von juetho
tim9394 hat geschrieben:Ich denke damit kann das Thema geschlossen werden...
Das hast du selbst in der Hand. Üblich ist, dass du den
ersten Beitrag zum
Ändern öffnest und an den Anfang der Titelzeile (Betreff) etwas wie "[gelöst]" oder "[erledigt]" einfügst. Jürgen