verschachtelte Suchkriterien
Hi
habe folgendes Problem.
Habe ein Formular, das als Suchmaske dient.
In dem Formular ist ein Unterformular eingebetet, dass auf eine Abfrage einer Tabelle zugreift.
Die Abfrage beinhaltet Spalten wie "Firma", "Datum", "Artikel" etc.
Im hauptformular sind jetzt Textfelder. In diese Textfelder sollen Suchbegriffe eingegeben werden, für die dann im Unterformular dann die zutreffenden Einträge angezeigt werden sollen.
Sprich: Ich gebe im Feld Firma einen Firmennamen ein (die anderen Suchfelder sind noch leer) und das unterformular zeigt mir automatisch alle Einträge dieser Firma an.
Das klappt auch soweit (mit requery des unterformulars etc.)
Nunn möchte ich aber zusätzlich zur Firma in das zweite Textfeld ein Datum eingeben, so dass er mir nur noch Einträge der Firma passend zu dem Datum zeigt.
Ab da fangen meine Probleme an. Wenn ich nämlich das datum in der Abfrage als weiteres Kriterium aufführe, zeigt er mir Ergebnisse, wenn ich nach Firma und Datum suche. Nur wenn ich dann nur noch nach Firma suche, zeigt er mir gar nix mehr an, weil er scheinbar das leere Textfeld für das Suchdatum irgendwie in dem Kriterium als Wert sieht oder so, denn er dann natürlich nicht in der Spalte der Abfrage finden kann.
Ich habe versucht, dass mit einem Wenn-Kriterium in der Abfrage zu umgehen, dass er halt das Kriterium bei einem leeren Feld auf "ist nicht null" setzt (damit prinzipiell alle Einträge angezeigt werden und dann von dem zweiten kriterium ausgefilter werden) Aber das klappt nicht. Er zeigt mir keine Ergebnisse an.
Wenn ich Oder Kriterien angebe zeigt er mir halt keine schnittmenge beider kriterien an.
sprich die such soll mit mehreren kriterien zusammen als auch mit nur einem suchbegriff funnktionieren
Antwort schreiben
Antwort 1 von Marie vom 26.09.2019, 02:39 Options
Na die Schnittmenge ist ja auch keine "oder" sondern eine "und" Menge :-)
Also wenn beide nicht Null, dann muss kriterium 1 UND kriterium 2 gelten.
Gruß Marie
Antwort 2 von mbalrog vom 26.09.2019, 08:37 Options
schon klar...nur, wenn nur ein kriterium erfüllt ist (weil nur in ein suchfeld ein begriff eingetragen wird) zeigt er mir nicht alles ergebniss zum ersten kriterium werde, weil das zweite kriterium nicht erfüllt ist und er dadurch natürlich eine schnittmenge machen will. und die schnittmenge von einem ergnis mit keinem ergebnis führt zu keinem ergebnis, obwohl ein ergebnis rauskommen müsste.
Nachvollziehbar?
wie kann ich das zweite Kriterium, im Fall, dass kein Wert vorhanden ist, sozusagen ohne Gewicht machen?
Antwort 3 von mbalrog vom 26.09.2019, 08:43 Options
ich dachte mir halt, das im oben genannten fall eine funktion geschrieben wird, dass anstelle das Kriterium kein Ergebnis liefert alles anzeigt, damit eine schnittmenge gebildet werden kann.
dachte halt, wenn das zweite kriterium (und dementsprechend natürlich auch das 3., 4. usw) nicht erfüllt wird das Kriterium auf "IST nicht NULL" gesetzt. nur mit meiner schreibweise klappt das nicht. Ist allerdings ein Wert vorhanden, wird dieser ganz normal als Kriterium genommen.
dachte an: Wenn([Forms]![Formular_X]![Textfeld]="";Ist Nicht Null;[Forms]![Formular_X]![Textfeld])
Aber es funst net.
Gebe ich z.B. nur eine Firma ein, sollten 3 ergebnisse kommen. tun sie nicht.
gebe ich z.b. Firma & Datum ein, gibts 1 ergebnis.
Antwort 4 von Teddy7 vom 26.09.2019, 09:37 Options
Verstehe ich das richtig, dass Du in der Abfrage als Kriterium die Textfelder angibst ?
Dann kann das so aussehen:
im Feld1:
[Forms]![Formular_X]![Textfeld] oder [Forms]![Formular_X]![Textfeld] ist null
im Feld2
[Forms]![Formular_X]![Textfeld2] oder [Forms]![Formular_X]![Textfeld2] ist null
...usw...
Mir ist sowas zu kompliziert. Ich mache ein Endlosformular als Ergebnisanzeige und gebe beim Öffnen des Formulars die Suchkriterien mit.
Dabei bastelt man sich quasi eine where-Bedingung (ohne where) zusammen und kann natürlich die nicht gefüllten Selektionsfelder ignorieren.
im Code sieht das so aus:
dim suche as string
suche = ""
if nz(sfeld1,"") <> "" then
suche = "Feld1 = '" & sfeld1 & "'"
end if
if nz(sfeld2,0) <> 0 then
if suche <> "" then suche = suche & " and "
suche = suche & "Feld2 = " & sfeld2
end if
DoCmd.OpenForm "FrmÜbersicht", acNormal, , suche, acFormReadOnly
---man beachte, dass Textfelder in Hochkommas geschrieben werden müssen---
Gruß
Teddy
Antwort 5 von mbalrog vom 26.09.2019, 09:59 Options
DANKE;-)
hat geholfen. Da ich mich mit der Programmierung noch nicht so auskenne, habe ich deine erste Lösung probiert. Funktioniert einwandfrei;-)