Seite 1 von 1

Parameter Zeitraum und Person in Formular erfassen

Verfasst: Do 12. Sep 2013, 15:57
von Herbert
Guten Tag

Ich versuche ein Formular zu erstellen, wo ich einen bestimmten Zeitraum abrufen kann. Gleichzeitig sollte dieser Zeitraum für eine einzelne Person ausgegeben werden können. Das Hauptformular basiert auf der Tabelle Filter, mit den Felder ID (Integer), Datumvon (Datumfeld), Datumbis (Datumfeld) Mitglied (Integer). Erstelle ich ein Unterformular, so lassen sich die einzelnen Personen anzeigen. Bleibt das Filterfeld Mitglied leer, zeigt das Unterformular nichts an.

Anhand des Dankenbankbeispiels zum Handbuch "Suchen und Filtern" stellte ich Filter und Anzeige auf die gleiche Ebene. Jetzt werden alle Datensätze angezeigt. Wähle ich jede eine Person im Filter an, erscheinen bei der Aktualisierung wieder alle. Was mache ich falsch?

Bei den Filtern Datumvon und Datumbis habe ich Textfelder, damit ich den bestimmten Zeitraum eingeben kann. Das Daum kann ich eingeben und wird im Filter abgespeichert, jedoch werden die Zeichen >= gelöscht. Wie verbinde ich die Textfelder mit der Anzeigetabelle.

Danke für die Unterstützung.

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Do 12. Sep 2013, 21:12
von RobertG
Hallo Herbert,

in der Beispieldatenbank sind ja verschiedene Versionen enthalten, wie Daten gefiltert werden können. Mit welcher Version versuchst Du Dein Ziel zu erreichen?

Was willst Du in den Filtern sehen? Wenn ich das richtig verstehe möchtest Du nicht Filter, die sich gegenseitig beeinflussen, sondern ein Feld, das ein Startdatum und ein anderes, das ein Enddatum angibt, oder?

Gruß

Robert

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Do 12. Sep 2013, 21:27
von Herbert
Hallo Robert

Ich habe mich an der Beispieldatenbank "Beispiel Suchen und Filtern" Filterung ohne Makro orientiert. Diese zeigt beim Start alle Datensätze an. Ich möchte nun im Filter1 das Anfangsdatum und im Filter2 das Enddatum eingeben können, damit es mir beispielsweise alle Datensätze vom 01.08. - 15.08.13 anzeigt. Diese wiederum möchte ich nach Mitglied filtern können.

Herzlicher Gruss
Herbert

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Fr 13. Sep 2013, 07:36
von RobertG
Hallo Herbert,

Du brauchst in der Tabelle "Filter" 2 Datumsfelder und ein Feld, das den Namen aufnehmen kann.
Danach musst Du die Abfrage konstruieren.
SELECT * FROM "Tabelle" WHERE "Datumvon" >= IFNULL((SELECT "Datumvon" FROM "Filter"),"Datumvon") AND "Datumbis" <= IFNULL((SELECT "Datumbis" FROM "Filter"),"Datumbis") AND "Mitglied" = IFNULL((SELECT "Mitglied" FROM "Filter"),"Mitglied")

Wenn das Formular leer bleibt, wenn im Feld "Mitglied" nichts steht, dann fehlt der Verweis IFNULL.

Gruß

Robert

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Mo 16. Sep 2013, 16:50
von Herbert
Hallo Robert

Besten Dank für deine Unterstützung. Die Abfrage funktioniert.

Ich habe noch eine Frage dazu: Im Datenbankbeispiel gibt es eine Spalte "IfNull(Sys.), 0". Welchen Zweck erfüllt diese, denn die Abfrage funktioniert auch ohne diese Spalte.

Gruss Herbert

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Mo 16. Sep 2013, 20:05
von RobertG
Hallo Herbert,

zähle einfach einmal die Datensätze der Abfrage, wenn Du diese Formulierung

Code: Alles auswählen

IFNULL( "Sys.", 0 ) AS "Sys.",
drin hast oder nicht. Es gibt Datensätze, bei denen ist nichts eingetragen in der Spalte "Sys.". Die werden damit zu '0' geändert. Sie werden sonst nicht angezeigt. Die Differenz in dem Beispiel ist 8187-8103=84 Datensätze. Dass die dann nicht angezeigt werden liegt daran, dass ich in der Abfrage eine Bedingung stehen habe:

Code: Alles auswählen

WHERE "Sys." = IFNULL( ( SELECT "Filter_1" FROM "Filter" ), "Sys." )
Wenn in der Tabelle "Filter" im Feld "Filter_1" kein Eintrag ist, dann soll "Sys." = "Sys." sein. Das zeigt alle Einträge an, in denen etwas steht - denn für die gilt das. Für Einträge, bei denen das Feld leer ist (Datenbanksprache NULL) funktioniert die Gleichsetzung nicht. Deswegen wurde diesen leeren Feldern ein Wert in der Abfrage zugewiesen.
Das funktioniert genauso mit dem anderen Feld, das in dem Beispiel abgefragt wird.
Allein Spalten, in denen garantiert an jeder Stelle einen Wert haben, kannst Du von so einer Konstruktion ausnehmen. Noch besser wählst Du allerdings bei einem Textfeld wie "Sys."

Code: Alles auswählen

IFNULL( "Sys.", '' ) AS "Sys.",
Dann steht in dem Feld zwar nichts Sichtbares drin, es ist aber auch nicht NULL.

Gruß

Robert

Re: Parameter Zeitraum und Person in Formular erfassen

Verfasst: Mi 25. Sep 2013, 22:19
von Herbert
Danke für die Information. Nun habe ich begriffen.

Gruss Herbert