PDA

Vollständige Version anzeigen : Bedingtes Abfragekriterium


Wanggoolba
29.04.2001, 15:57
Hallo,

kann mir jemand bei folgendem Problem helfen. Ich möchte eine Abfrage erstellen (aus einer Kundentabelle), bei der ich folgendes (beispielhaftes) Kriterium in der Entwurfsansicht für Abfragen eingegeben habe.

...im Feld Kundenname:

wenn([bedingung];"Meyer";???)

Also wenn eine bstimmte Bedingung erfüllt ist, soll er mir alle Datensätze mit dem Kundenname Meyer anzeigen, wenn diese Bedingung nicht erfüllt ist, soll er mir alle (!!!) Kunden anzeigen. Was muß ich jetzt an der Stelle "???" eingeben? Habe schon "*" versucht und ähnliches, aber leider erfolglos.

Vielen Dank für die Hilfe!

Wanggoolba

A.S.
29.04.2001, 20:05
Hallo Wanggoolba,

Dein Kriterium muß lauten

Wie Glätten([Kundenname?])&"*"

Mit obigem Kriterium erscheint bei Aufrufen der Abfrage eine Inputbox, in die Du den gewünschen Kundennamen eingeben kannst. Existieren ein oder mehrere Kunden, deren Name mindestens mit der von Dir eingegebenen Zeichenfolge beginnt, werden Dir diese angezeigt. Gibst Du nichts in das Eingabefeld ein, werden alle Datensätze selektiert.

Du kannst anstelle von "[Kundenname?]" natürlich auch einen Feldbezug auf ein Formular eingeben und die Abfrage aus einem Formular starten. Funktioniert genauso.

HTH

Arno

PS Pardon, wenn Du natürlich sowohl den eingesetzten Namen als auch die Bedingung an etwas anderes knüpfst, ist für Dich nur das

wie "*"

interessant um alle Datensätze zu erhalten.

Bernd Koch
30.04.2001, 02:13
???? Arno, das kann ich nicht nachvollziehen.

Meines Erachtens bezieht sich die Wenn-Funktion in der Abfrage immer nur auf einen einzelnen Datensatz. Er will aber, je nach Ausgang der Bedingung, entweder ein paar oder aber alle Datensätze der Tabelle/Abfrage ausgegeben kriegen und nicht irgendwas in den jeweiligen Datensätzen bewerkstelligen.

Sollte er seine Sache daher nicht im Formular oder Bericht realisieren, Ereignisprozedur Beim Öffnen ? Korrigiere mich, wenn ich „schief“ denke.


Wanggoolba,
du schreibst nicht, was für eine Bedingung du setzen willst, deshalb konstruiere ich was. Am besten, du baust dir mal als Demo das Nachfolgende zusammen.

- Du erstellst eine Tabelle mit zwei Feldern (Kundenname und Sonstiges); es gibt 4 Datensätze.
- Bei „Kundenname“ steht in zweien „Meyer“ drin, in den anderen beiden „Müller“ und „Lehmann“. Bei „Sonstiges“ ist nirgendwo was drin.
- Auf diese Tabelle (oder Abfrage) basierst ein Autoformular:tabellarisch.
- Erstelle nun eine Ereignisprozedur für das Formularereignis „Beim Öffnen“ mit nachfolgendem Code:

If IsNull(Me.Sonstiges) Then
DoCmd.ApplyFilter , "Kundenname = 'Meyer'"
ElseIf Not IsNull(Me.Sonstiges) Then
Me.FilterOn = False
End If

(Beachte, dass in der zweiten Zeile ganz am Ende nach dem Wort Meyer ein Hochkomma u n d ein Anführungszeichen stehen.)

Wenn du jetzt das Formular öffnest, sind da nur die beiden Datensätze mit Kundenname=Meyer.

Schreibe jetzt irgend ein Zeichen bei einem der beiden Felder von „Sonstiges“ rein und schließe das Formular. Beim nächsten Öffnen erscheinen alle vier Datensätze.

Ich hoffe, der grundsätzliche Verlauf ist klar und du kannst es auf deine DB abändern. Wenn nicht - es gibt hier irgendwo so´n Forum ...

Bernd

Wanggoolba
30.04.2001, 09:18
Hallo Arno, hallo Bernd,

vielen Dank für eure Beiträge. Sie haben mir beide sehr weitergeholfen. Ich habe ein paar Probeläufe an einer TestDB vorgenommen und es funktioniert.

Vielen Dank nochmal!

Wanggoolba

A.S.
30.04.2001, 09:49
Hallo Wanggoolba,

gern geschehen.

Hallo Bernd,

frei nach AOL: "Sie haben Post!" !!!

Desweiteren: Er hat expliziet nach einer Abfrage gefragt und die habe ich ihm gegeben ;) Wenn auch etwas flexibler als er sie vielleicht haben wollte :cool:

<i>
Meines Erachtens bezieht sich die Wenn-Funktion in der Abfrage immer nur auf einen einzelnen Datensatz. Er will aber, je nach Ausgang der Bedingung, entweder ein paar oder aber alle Datensätze der Tabelle/Abfrage ausgegeben kriegen und nicht irgendwas in den jeweiligen Datensätzen bewerkstelligen.
</i>

Ich bewerkstellige ja auch nichts in den Datensätzen. Die durch mein angegebenes Kriterium aufgerufene InputBox dient nur als Kriterium.

<i>
Sollte er seine Sache daher nicht im Formular oder Bericht realisieren, Ereignisprozedur Beim Öffnen ? Korrigiere mich, wenn ich „schief“ denke.
</i>

Das kann man auf beiden Wegen machen. Entweder als Kriterienausdruck in der Abfrage oder als Filterausdruck im Formular bzw. Bericht. Der Vorteil an der Abfrage ist das Du nur ein Me.Requery auf das jeweilige Objekt (Formular/Bericht) absetzen mußt und die Abfrage das Kriterium automatisch übernimmt, wenn statt der Inputbox ein Formularbezug eingesetzt wird. Mit Deiner Lösung muß erst das Filterkriterium neu gesetzt und das ApplyFilter abgesetzt werden.

cu

Arno