Hallo Zusammen,
nachdem ich nun Stunden vergeblich versucht habe einen Report mit Bedingungen aus einem Formular heraus aufzurufen, wende ich mich nun an die Profis.
Das Formular "FRM_Austritte_Verstorben" ist mit einer Abfrage mit 2 Parameterabfragen "QRY_Austritte_Verstorben" als Datensatzquelle verbunden.
Ruft man Formular auf wird man nach dem Austrittsjahr und dem Verstorbenjahr gefragt. Das Endlosformular öffnet sich und die korrekten Datensätze werden angezeigt.
Nun möchte ich durch einen Button "Report drucken" diese Datensätze im Report "RPT_Austritte_Verstorben" ausgeben und das Tabellenfeld (Ja/Nein) "Austritte_Verstorbene_gedruckt" auf Ja setzen.
Das Setzen des "Austritte_Verstorbene_gedruckt" hat funktioniert, aber der Report bleibt leer.
Dem Report habe ich zuerst die gleiche Abfrage wie dem Formular zugewiesen. Dann muss ich aber die Parameter 2 mal eingeben. Also Abfrage aus der Datensatzquelle des Reportes entfernt.
Da gibt es ja den DoCmd.OpenReport Befehl mit dem ich nun versuche die Daten auf den Report zu bringen.
stDocName = "RPT_Austritte_Verstorben"
DoCmd.OpenReport stDocName, acPreview, "QRY_Austritte_Verstorbene", "AJahr = " & Me!p_AJahr & " OR VJahr = " & Me!p_VJahr
Mit dem Where-Parameter habe ich schon alles ausprobiert.... Leider klappt es so irgendwie nicht.
Wo liegt mein Denkfehler oder gibts ne andere Lösung?
Grüße
Armin
Hallo Frog,
dein DoCmd.OpenReport ist falsch aufgebaut. Es wird dabei kein Filtername mit dem Abfragenamen übergeben, sondern schlichtweg die Wherecondition als String, z.B:
DocCmd.OpenReport "RPT_Austritte_Verstorben", _
acViewPreview,, "Year(AJahr) = " & Austrittsjahr & " OR Year(VJahr) = " & VerstorbenenJahr
Die Parameternamen mußt du natürlich an deine Gegebenheiten anpassen.
Knobbi38
Danke für deinen Tipp.
Aber es wollen keine Daten im Report angezeigt werden.
Hab die DB abgespeckt und beigefügt. Das vereinfacht vieles.
Die beiden Parameter beim Aufruf des Formulares einfach 2 mal mit 2024 oder 2 mal mit 2025 füllen.
Dann sollten 2 Datensätze im Formular angezeigt werden.
Der Button startet die Ausgabe per Report.....
Grüße
Armin
Hallo Armin,
ohne eine Datensatzquelle wird dein Report auch nichts anzeigen. :-\
Mal eine Frage am Rande:
In diesem Beispiel gibt eine Parameterabfrage überhaupt keinen Sinn und verkompliziert nur alles. Warum möchtest du eigentlich so eine Abfrage als Datensatzquelle verwenden?
🛑 Du solltest mal deine DB auf das accdb Format umstellen und die Verweise in deinem Beispiel auf den aktuellen Stand bringen.
Btw.:
- ein Feldnamen "Name" ist keine gute Idee, weil viele Eigenschaften und eine VBA Funktion schon so bezeichnet sind -> besser "Nachname".
- dein Datenmodell ist mehr als überholungsbedürftig.
Knobbi38
Hallo Knobi,
erst mal Merci für die Tipps.
Warum ich so eine Abfrage mit 2 Parametern gebaut habe.
Ich muss in der Lage sein für vergangene Jahre die Daten abrufen zu können. Mit den Parametern ist das flexibel.
Im Formular kann ich mir die Daten dann ansehen und dann rufe ich eine Wordvorlage auf und übergebe die Daten an Textmarken. Das funktioniert alle bis auf die Doppelte Parametereingabe. Erstens beim öffnen des Formulares und zweitens bei drucken in die Vorlage/Report, weil bei beiden die gleiche Parameterabfrage genutzt wird.
Werde die Datenbank auf ACCDB umbauen und die Verweise aktualisieren.
Dann werde ich wieder an mein kleines Problem machen.
Grüße
Armin
Hallo Armin,
verzichte auf die Parameterabfrage. Nicht so kompliziert denken.
Für das Formular verwendest du besser Filter und im Report kannst du dann die gleiche Abfrage wie im Formular verwenden. Dann kannst du sehr viel einfacher die aktuelle Filterbedingung auslesen und dem Report als WhereCondition mitgeben.
Gruß Knobbi38
Hallo Knobi,
Parameter aus Abfrage entfernt. Formular zeigt jetzt alle Daten der Abfrage an.
Textfeld "p_Selektionsjahr" setzt den Filter:
Me.Filter = "AJahr = '" & Me.p_Selektionsjahr & "' OR VJahr = '" & Me.p_Selektionsjahr & "'"
Me.FilterOn = True
Formular zeigt nun die gewünschten Daten an.
Button "Report" ruft den Report mit der gleichen Abfrage des Formulares auf.
Jetzt muss ich nur noch filtern mit dem Wert des Textfeldes "p_Selektionsjahr" aus dem Formular.
Der Aufruf:
DoCmd.OpenReport stDocName, acViewPreview, , "AJahr = '" & Me.p_Selektionsjahr & "' OR VJahr = '" & Me.p_Selektionsjahr & "'"
ruft den Bericht mit dem exakt gleichen Filter auf. Datenausgabe perfekt!
Vielen Dank.
Grüße
Armin
Hallo Armin,
genauso hatte ich das gemeint. Wenn es dann funktioniert, um so besser.
Grüße Knobbi38
Warum nicht den Filter gleich komplett übergeben
DoCmd.OpenReport stDocName, acViewPreview, , Me.Filter