Anja aus Auckland: Datenbank durchsuchen

Hallo liebe Forumler!

ich habe für eine Access Datenbank eine kleine Suchmaschine gebaut. Der Suchende kann in einem Formular gleichzeitig nach Titel, Autor und einem Schlüsselwort suchen.
Aus den Formulardaten wird dann der entsprechende SQL String zusammengebaut,
-----------------------------------------------
queryString = "SELECT * FROM Internet_Library "

If (desc <> "") AND (author <> "") AND (title <> "") Then
  tempQueryString = tempQueryString & "WHERE Desc LIKE '%" & desc & "%' "
  tempQueryString = tempQueryString & "AND Author LIKE '%" & author & "%' "
  tempQueryString = tempQueryString & "AND Title LIKE '%" & title & "%'"

ElseIf (desc <> "") AND (author <> "") AND (title = "") Then
  tempQueryString = tempQueryString & "WHERE Desc LIKE '%" & desc & "%' "
tempQueryString = tempQueryString & "AND Author LIKE '%" & author
  & "%' "
...
----------------------------------------------
...ausgeführt ... die Suchergebnisse werden ausgegeben.
Funktioniert soweit alles recht gut.

Diese (etwas umständliche) Methode stößt aber doch recht schnell an Ihre Grenzen.

Ich möchte nämlich, dass es auch möglich ist, in einem Feld nach mehreren Schlüsselwörtern gleichzeitig zu suchen, bzw. diese mit boolschen Werten zu verbinden.
Also z. B. nach SchlüsselwortA UND SchlüsselwortB zu suchen.

Wenn ich anstatt der aufwendigen Generierung des SQL Strings die Methoden des Recordsets benutze, gäbe es dann irgend eine halbwegs elegante Lösung? D. h. eine Möglichkeit das ganze zu realisieren, ohne weiter zig Alternativen zu implementieren?

bei interesse vielleicht zum besseren Verständnis, das vorläufige Ergebnis meiner Bemühungen:
http://www.hera.org.nz/library/library.htm

Ich würde mich über jede Idee oder möglichen Lösungsansatz freuen.

vielen Dank, bis morgen
und viele Grüße aus Neuseeland,
Anja

  1. Halihallo Anja

    Ich möchte nämlich, dass es auch möglich ist, in einem Feld nach mehreren Schlüsselwörtern gleichzeitig zu suchen, bzw. diese mit boolschen Werten zu verbinden.
    Also z. B. nach SchlüsselwortA UND SchlüsselwortB zu suchen.

    Ich glaube, dass es das intelligenteste wäre, dieses in SQL umzusetzen (denn damit
    geht es ziemlich einfach). Eine eigene Implementierung auf Seiten der Scriptsprache
    ist nicht performant und erhöht die Komplexität des Programmes.

    Wenn ich anstatt der aufwendigen Generierung des SQL Strings die Methoden des Recordsets benutze, gäbe es dann irgend eine halbwegs elegante Lösung? D. h. eine Möglichkeit das ganze zu realisieren, ohne weiter zig Alternativen zu implementieren?

    Alternativen sind schlecht. Definiere eine Verarbeitungsvorschrift, welche die Daten
    aus der Suchmaske algorithmisch, also automatisch in einen SQL-Query transformiert.
    Ist die bool'sche Abfragesprache einfach definiert (z.B. keine Klammerung, nur AND und
    OR) ist dies nicht schwer.

    Ich würde mich über jede Idee oder möglichen Lösungsansatz freuen.

    Der Lösungsansatz hängt massgebend davon ab, wie du _genau_ realisieren möchtest. Was
    heisst für dich "boolsche Werte verbinden". Wie Komplex darf dieses verbinden sein?
    "Klammerebenen" erlaubt? - Gibt es auch ein OR?
    Die Komplexeste Variante mit OR und Klammerung ist problematisch, da der SearchQuery
    nicht mehr einfach geparsed werden kann (und das musst du tun, um ihn in den SQL-query
    zu übersetzen). Meiner Meinung nach wäre es am klügsten eine vorgegebene Maske zu
    verwenden (Stichwort1, Drop-Down mit logischem Operanden, Stichwort2, ..., Stichw. n),
    dann fällt auch das SearchTerm-Parsing weg und das ganze liesse sich relativ einfach
    in den SQL-query transformieren.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hallo Philipp,

      danke fuer Deine Antwort. Ich hatte schon befuerchtet
      irgendeine triviale Loesung uebersehen zu haben.

      Ich hab mich jetzt auf AND und OR, ohne Klammerung beschraenkt.
      Das mag nicht optimal sein, ist aber fuer
      meine Anforderungen ausreichend und lies sich recht gut
      mit SQL Strings realisieren.

      Also noch mal danke.
      Anja