PDA

Vollständige Version anzeigen : kniffliges Suchformular mit mehreren Kriterien


mikeboy
06.08.2001, 13:49
Servus miteinander !

Ich habe 1 Formular und 1 Unterformular, die auf 2 Tabellen basieren. Im Hfrm werden Kundendaten angezeigt und im Ufrm Daten der zugehörigen Ansprechpartner. Jetzt habe ich mir ein Suchformular erstellt, mit mehreren ungebundenen Textfeldern, in die ich einen Suchbegriff eingebe und der dazugehörige Datensatz wird mir im Hfrm angezeigt.
Ich kann zwar in mehreren Suchfeldern einen Begriff eingeben, allerdings erhalte ich immer ein "oder" Ergebnis ! Des weiteren muß ich immer den genauen Suchbegriff eingeben, anstatt z.B. "P*" !
Hier meine Fragen: Ist es möglich die Einstellungen so zu ändern, daß ich "und" Ergebnisse erhalte, sprich mit mehreren Kriterien suchen kann ?? und außerdem bei der Suche mit Platzhaltern arbeiten kann !

Vielen Dank für Eure Hilfe.

Gruß Mike

Ohnesorg
06.08.2001, 15:13
Hallo Mike,

am einfachsten ist das, wenn Du mit einem Filter arbeitest.
Bennene die Datenfelder, die die Suchkriterien erhalten sollen in Filter1, Filter2, Filter3... u.s.w. um.

Unter der Eigenschaft Tag (Oder auch Marke) gibst den Namen des Datenfeldes ein, für den das Filter-Feld zuständig sein soll.

Nun initiierst Du eine Schleife, die so viele Schleifendurchgänge hat, wie Du Datenfelder hast.

Deklariere nun noch eine lokale Variable Namens sSQL als String und Du kannst den folgenden Quelltext einfach hinein kopieren.

Die Variable "sMask" enthält entweder "AND" oder "OR". Da hat der User zum Bleistift über eine Optionsgruppe die Möglichkeit selbst zu entscheiden, ob er eine Und- oder eine Oder- Suche verwenden will.

Bevor Du den Filter verwendest, musst Du allerdings das letzte UND bzw. ODER wegschneidest. Ansonsten gibt es da ein Problem.


sSQL = sSQL & " [" & Me("Filter" & nCounter).Tag & "] " & " Like " & _
ChrW(34) & Me("Filter" & nCounter) & ChrW(34) & sMask


hast Du soweit eine Zeichenkette generiert, kannst Du mit


Me.Filter = sSQL
Me.FilterOn = True


den Filter einschalten.

Deine Jokersuche funzt dann ebenfalls ohne Probleme. ;)

mikeboy
06.08.2001, 15:40
Danke Kleister-Meister Ohnesorg,

doch ohne Sorg bin ich noch nicht !
Weiß nämlich nicht genau wie die Schleife aussehen soll.
Könntest Du mir vielleicht eine Runde posten ?

Herzlichen Dank !

Gruß Mike

mikeboy
07.08.2001, 10:05
Hallo!

Ich habs leider immer noch nicht geschafft mit der Schleife.
Könnte mir bitte jemand ne kleine Hilfestellung geben.

Dank Euch !

Mike

HansAmann
07.08.2001, 12:11
Hallo Mike!

Ich habe für ein Projekt eine Such-Maske programmiert, die mehrere Text- und Kombinationsfelder mit UND verknüpft. Das "A*" funktioniert mit LIKE in der SQL-Abfrage
Ich hoffe, Du kannst damit was anfangen.

MfG

Hans

mikeboy
07.08.2001, 12:47
Vielen Dank Hans !!

Ich hab die db kurz angeschaut und hoffe daß ich darus schlau werde ! Der Code ist ja sehr umfangreich !!
Ich werde Dich auf jeden Fall über den Verlauf informieren !!

Liebe Grüße Mikeboy

Ohnesorg
07.08.2001, 13:28
Hi Mike,

Sorry, mache immer um 16:30 Feierabend. Hab Dich deshalb ebbes vernachlässigt.

Was die Schleife angeht....

ich gehe davon aus, dass es 5 Suchkriterien sind... also initialisiere ich eine Konstante mit dem Wert 5.


const AnzahlFilter = 5
dim Schleifenzaehler
for Schleifenzaehler = 1 to AnzahlFilter
sSQL = sSQL & " [" & Me("Filter" & schleifenzaehler).Tag & "] " & " Like " & _
ChrW(34) & Me("Filter" & Schleifenzaehler) & ChrW(34) & sMask
next

'Jetzt wird das Ende gecuttet
sSQL = Left(sSQL, 3)



Left(sSQL, 3) kürzt die Zeichenkette aus sSQL um die drei Zeichen letzten Zeichen (AND)
verwendest Du als verknüpfung der Suchkriterien das "ODER" (OR) dann heißt es
Left(sSQL, 2).

mikeboy
08.08.2001, 15:10
Hi Ohnesorg,

hab eben erst Deine Antwort gelesen, hätte nicht mehr mit einer Antwort gerechnet, aber wenn Du schon um 16.30 Feierabend machst!!! Na ja , jeder wie er`s verdient !!
Ich werde es jetzt probieren und Dir dann nochmal ein Feedback geben.

Vielen Dank für Deine Mühe

Gruß Mike

MarkX
08.08.2001, 15:36
Ginge allerdings auch so:

als Filterkriterium "Wie [DeinFormular]![Dein´_ungebundenes_Feld]"

Bei Aktualisierung Deines Suchmaskenfeldes:

Me.Dein_ungebundenes_Feld = Me.Dein_ungebundenes_Feld & "*"
Me.Requery

So klappts jedenfalls bei mir.

Außer wenn leere Felder im Spiel sind -> siehe auch meine Frage ein paar Themen zuvor. Existiert Dieses Problem auch bei der von Euch beschriebenen Variante?

mikeboy
13.08.2001, 09:21
Guten Morgen,

ich habe jetzt den Code von Kleister Meister Ohnesorg getestet und erhalte wg dem Ausdruck

& Me("Filter" & Schleifenzaehler)

die Fehlermeldung: Erwartet:Anweisungsende, wobei Filter blau gefärbt wird.

Ich weiß nicht warum !
Kann mir hier jemand behilflich sein ?

Gruß Mike