Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: dobby110 am April 25, 2019, 06:58:48

Titel: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 25, 2019, 06:58:48
Hallo zusammen,

ich habe einen Bericht, der aus einer Abfrage heraus geöffnet wird.
In der Abfrage habe ich für die Valuta als Kriterium folgenden Eintrag hinterlegt: [bitte Valuta Datum eingeben]

Demnach bekomme ich ja nur die Einträge, mit der entsprechenden Valuta angezeigt.
Auf dem Bericht habe ich ein Textfeld mit dem Steuerelemtinhalt: "bitte Valuta Datum eingeben"
Demnach wird mir die gesuchte Valuta auch auf dem Bericht angezeigt. Dies aber nur für die Tage, an denen ein Treffer mit entsprechender Valuta gefunden wird. Wird kein Treffer erzielt, wird mir auf dem Bericht auch nicht das Valuta-Datum angezeigt, nachdem ich gesucht habe.

Wie schaffe ich es, dass mir die abgefragte Valuta auch auf dem Bericht angezeigt wird, wenn ich keine Treffer lande?

Vorab schon einmal vielen Dank für eure Hilfe.
Wäre super, wenn ihr so antwortet, dass es auch der dümmste versteht ;-) Bin nicht der große Guru ;-)
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: DF6GL am April 25, 2019, 09:05:14
Hallo,

wenn die Abfrage keine DS liefert, kann auch der Parameterwert nicht dargestellt werden.

Wirf diesen Abfrageparameter heraus und öffne den Bericht nicht aus dem Navibereich, sondern erstelle ein Formular mit mindestens einem Textfeld ("txtValutaDatum") zur Eingabe des Datums und öffne den Bericht mit Hilfe der OpenReport-Methode in einer Ereignisprozedur (z. B. Nach Aktualisierung des Textfeldes oder durch Klick auf eine Schaltfläche).


Sub txtValutaDatum_AfterUpdate() 
Docmd.OpenReport "rptDeinBericht", acPreview, , "Valutadatum = " & Format (nz(Me!txtValutaDatum,0), "\#yyyy-mm-dd\#"), , nz(Me!txtValutaDatum,0)
End Sub



Im Bericht wird ein zusätzliches ungebundenes Textfeld ("txtValDat") erstellt, dem der bei der OpenReport-Methode mitgegebene Datumswert im Berichtsereignis "Beim Laden" zugewiesen wird:


Private Sub Report_Load()
Me!txtValDat = Me.OpenArgs
End Sub

Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 25, 2019, 11:48:30
Vielen Dank, das funktioniert schonmal.

Ich habe nur zwei Probleme.
Punkt 1: Wie schaffe ich es, dass auch meine Abfrage den Wert berücksichtigt und nach dem gewünschten Valuta-Tag sucht?

Punkt 2: Unabhängig von dem Datum, welches ich in das Textfeld eintrage, poppt nochmals ein Feld auf, in dem ich nach dem Valutadatum gefragt werde. Das kann man doch auch sicher umgehen bzw. sich sparen? Ich schätze mal das hat mit diesem Teil des Codes zu tun:


, "Valutadatum = "
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: Beaker s.a. am April 25, 2019, 17:44:10
@dobby110
Zitat von: DF6GL am April 25, 2019, 09:05:14
Wirf diesen Abfrageparameter heraus ...

Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 26, 2019, 09:51:48
ok, jetzt gibt es nur noch ein Problem:

Ich habe das Datum im Format 26.04.2019 angegeben.
Im Code ist es mit yyyy-mm-dd angegeben. Daher finde ich natürlich keine Treffer.

Wie muss ich den Code schreiben, damit ich Treffer im Format TT.MM.JJJJ lande ?

Habe jetzt mal in meiner Tabelle nachgeschaut. Dort ist das Feld mit dem Felddatentyp "Datum/Uhrzeit" im Eingabeformat 00.00.0000;0;_ angegeben.


Wäre der Code dann so richtig?


Sub txtValutaDatum_AfterUpdate() 
Docmd.OpenReport "rptDeinBericht", acPreview, , "Valutadatum = " & Format (nz(Me!txtValutaDatum,0), "\#00.00.0000;0;_\#"), , nz(Me!txtValutaDatum,0)
End Sub



Ergänzung: Führt zu einem Laufzeitfehler 3075
Valutadatum = #26042019,00.0000'.

Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: MzKlMu am April 26, 2019, 10:26:33
Hallo,
Datumsvergleiche erfordern zwingend das ISO Format (JJJJ/MM/TT) oder das US Format (MM/TT/JJJJ). Du musst als den Datumswert in eines dieser Formate ändern.
Der Code von Franz aus #1 sollte also unverändert passen.
Siehe hierzu:
FAQ 6.8 Datum an SQL-String übergeben (http://www.donkarl.com?FAQ6.8).
Deine eigene Formatierung des Datumsfeldes (TT/MM/JJJJ) bleibt da erhalten.

PS:
Ein Tip aus der Praxis: Verzichte besonders bei Datumsfeldern auf ein Eingabeformat. Diese sind eher hinderlich als wirklich hilfreich.
Wenn Du bei einem Datenfeld eine verkürzte Eingabe machst (z.B. 26.4) so wird das automatisch auf 26.04.2019 ergänzt. Mit Eingabeformat ist das nicht mehr möglich. Was oftmals hinderlich ist.
Auch muss man beim Klick ins Datumsfeld den Cursor immer ganz vorne plazieren, was auch eher lästig ist.
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 26, 2019, 10:38:50
Ok danke für den Hinweis.
Ich muss also das Datumsformat bereits in meiner Tabelle anpassen?
Was mir noch nicht so ganz einleuchtet ist die Tatsache, dass mir dort eigentlich gar nicht das ISO-Format vorgeschlagen wird. Ich kann ja im Grunde nur den Felddatentyp auswählen und dann unten unter Allgemein das Eingabeformat bestimmen. Und dort ist es dann so, dass ich wählen kann zwischen Datum, Jahr 4-stellig / Zeit, lang / Datum, kurz / Datum, mittel .... usw.

Wie kann ich denn dort jetzt das ISO-Format (JJJJ/MM/TT) hinterlegen?
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: MzKlMu am April 26, 2019, 11:12:19
Hallo,
ZitatIch muss also das Datumsformat bereits in meiner Tabelle anpassen?
Nein, Dein Datumsformat in der Tabelle ist bedeutungslos.
Habe ich doch bereits geschrieben:
ZitatDeine eigene Formatierung des Datumsfeldes (TT/MM/JJJJ) bleibt da erhalten.
Die Formatanpassung erfolgt ausschließlich im VBA Code wie von Franz gezeigt.

Formate sind ohnehin nur Schall und Rauch und dienen nur der Ansicht.
Bei Datum steht da in Wirklichkeit im Tabellenfeld eine Zahl des Typs Double.

PS:
Du bist beim Formateintrag in der Tabelle nicht an die Auswahl gebunden. Du kannst dort auch jeden beleibigen gültigen Formateintarg reinschreiben. Also z.B. auch jjjj.mm.tt
Was aber nichts nutzen würde, denn im VBA Code musst Du doch wieder in das ISO (oder US Format) verwenden.
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 26, 2019, 11:41:47
ja sorry , jetzt ist es bei mir angekommen. ;-)

Es funktioniert auch ....
Ich würde nur noch eine Sache gerne "verschönern"

Und zwar hatte ich den Bericht immer mit einem Button angesteuert. Also bin ich hingegangen und habe ein neues Formular erzeugt in dem ich nur das Text-Feld integriert habe. Das Formular will ich über einen Button öffnen, so dass sich im Anschluss mein "neues Formular mit der Datumsabfrage" in einem Dialog-Fenster öffnet. 
Dort gebe ich dann das gewünschte Datum ein und mein Bericht öffnet sich. Allerdings bleibt das Dialog-Fenster immer im Vordergrund offen. Kann man den Code dahingehend verändern, dass sich das Dialog-Fenster automatisch schließt, nachdem sich der Bericht öffnet?


Sub txtValutaDatum_AfterUpdate()
DoCmd.OpenReport "Ber_Massnahmen_per_Valuta_für_taegl_Bericht", acPreview, , "Valuta=" & Format(Nz(Me!txtValutaDatum, 0), "\#yyyy-mm-dd\#"), , Nz(Me!txtValutaDatum, 0)
DoCmd.Close acForm, "fml_Datumsabfrage_für_Bericht", acSaveYes
End Sub



Hätte das jetzt so gelöst. Dann ist mein Bericht zwar offen, aber ich sehe in der Ansicht mein Formular, von dem ich den Button betätigt habe. Ich hätte an der Stelle aber gerne meinen Bericht im Vordergrund.
Titel: Re: Suchkriterium auf Bericht anzeigen lassen ?
Beitrag von: dobby110 am April 26, 2019, 12:25:54
Ich habe es glaube ich gelöst


Sub txtValutaDatum_AfterUpdate()
DoCmd.OpenReport "Ber_Massnahmen_per_Valuta_für_taegl_Bericht", acPreview, , "Valuta=" & Format(Nz(Me!txtValutaDatum, 0), "\#yyyy-mm-dd\#"), , Nz(Me!txtValutaDatum, 0)
DoCmd.Close acForm, "fml_Datumsabfrage_für_Bericht", acSaveYes
DoCmd.SelectObject acReport, "Ber_Massnahmen_per_Valuta_für_taegl_Bericht"
End Sub




Jetzt aber doch noch eine letzte Frage.
Wenn ich den Bericht in der Seitenansicht öffne, kann ich normalerweise den "Drucken" Button anklicken. Den sehe ich jetzt zwar auch noch, ich kann ich aber nicht betätigen bzw. aktivieren.