Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: gsaccess am März 01, 2024, 14:04:50

Titel: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: gsaccess am März 01, 2024, 14:04:50
Ich bräuchte wieder einmal eine Hilfe.
Ich habe in der Datenbank Bericht, die aus verschiedenen Formularen aufgerufen werden.
Den Berichten liegen Abfragen zugrunde. Diese Abfragen beziehen sich immer auf auf ein Feld in einem Formular. (zB Kriterium in der Abfrage zB:[Formulare]![frmAuftraganlegen]![KombiAuftrag]).
Wenn ich den gleichen Bericht aus einem anderen Formular aufrufe habe ich eine zweite Abfrage und einen zweiten Bericht anglegt. (Kriterium in der Abfrage zB.[Formulare]![frmNaviAuftragsverwaltung]![txtAusgewaehlterAuftrag]) und diese neue Abfrage dem zweiten Bericht zugeordnet.

Gibt es eine Möglichkeit, dass ich das AbfrageKriterium zwischenspeichere und dann an die Abfrage übergebe und so mehrere  Berichte aufrufen kann(gleicher Inhalt - Aufruf aus verschiedenen Formularen)?

Vielen Dank im Voraus
Günther
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: andyfau am März 01, 2024, 14:44:41
Hallo Günther,

Das Zauberwort heißt hier Parameterabfragen.

Eine schöne Anleitung findest Du unter:
Parmeterabfragen (https://www.akademie.de/de/wissen/elegantere-parameter-abfragen-in-access)

Beste Grüße
Andreas
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: ebs17 am März 01, 2024, 16:15:20
Der einfache Weg wird wohl sein, Du verwendest für Deinen Bericht eine ungefilterte Abfrage als Datenquelle. Macht in Summe ein Stück.

Den Filter aus dem Formular heraus übergibst Du dann als WHERE-Argument beim OpenReport.

Oder erstellst Du in mehreren Formularen einen zusammengefassten Filter für den Bericht? Deine Beschreibung ist offensichtlich in mehrere Richtungen interpretierbar ...
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: gsaccess am März 03, 2024, 10:25:49
Danke für eure Rückmeldungen.

ZitatDas Zauberwort heißt hier Parameterabfragen.
Parameterabfragen sind mir grundsätzlich ein Begriff.
Nicht klar ist mir dabei wie ich auf verschiedene Formulare zugreifen kann.
Mein Versuch: siehe Bild Parameterabfrage und der dabei entstehende Fehler(Parameterfehler)
Es sollte ja egal von welchem der drei Formulare die Abfrage aufgerufen wird der richtige Parameter übernommen werden.

ZitatDer einfache Weg wird wohl sein, Du verwendest für Deinen Bericht eine ungefilterte Abfrage als Datenquelle. Macht in Summe ein Stück.

Den Filter aus dem Formular heraus übergibst Du dann als WHERE-Argument beim OpenReport.

Oder erstellst Du in mehreren Formularen einen zusammengefassten Filter für den Bericht? Deine Beschreibung ist offensichtlich in mehrere Richtungen interpretierbar ...

Können beim where Argument beim Open Report auch mehrere Bedingungen eingegeben werden.
zB wenn Formular1 geöffnet dann Kriterium, wenn Formular2 geöffenet dann Kriterium ..?
Bei diesem Code bin ich leider überfordert.

Günther
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: ebs17 am März 03, 2024, 10:49:43
Mehrere Bedingungen können logisch (AND / OR) zu einem Gesamtkriterium verknüpft werden.

Was Du aber offensichtlich vorhast, ist gelinde gesagt unschön.

ZitatParameterabfragen sind mir grundsätzlich ein Begriff.

Du sprichst da von dem (oft hilflosen) Einbringen von Formularbezügen?
Das Wesen einer richtigen Parameterabfrage ist, dass man ihr im Zuge des Aufrufen genau die benötigten Kriterien ÜBERGIBT. Es sollte nicht Wesen sein, dass die Abfrage eine Runde durch die DB drehen muss und sich aus womöglich offenen Formularen nötige Werte holt. Solch ein Verbandeln von Objekten ist extrem schlechter Programmierstil, weil schon mal schwer pflegbar und fehlereinladend. So etwas wird Dir sehr schnell auf die Füße fallen, und vor allem, belaste Deinen Nachfolger nicht mit solchem Zeugs.

Also stelle Dein Kriterium zuerst zusammen, idealerweise aus einer Hand (= EIN Formular für Übersicht über das Tun), und übergib das dann an Abfrage/Bericht.

Immer sinnvoll: Erst Ablauf planen, dann herumcodieren.
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: andyfau am März 03, 2024, 22:13:56
Wie Eberhard sagt müssen die Parameter ÜBERGEBEN werden.
Parameterabfrage (Querydef-Objekt) erstellen.
Parameter übergeben
Das Abfrageergebnis in ein Recordset schieben, worauf dann zugegriffen werden kann.

Dim database As Database
Dim qry As Query

'Das Recordset, welches wir aus der Abfrage erhalten.
Dim rs As RecordSet

Set database = CurrentDB
Set qry= database.QueryDefs("qryTestParam")

'Hier setzen wir nun den Parameter den wir einfach mit dem Namen ansprechen.

qry.Parameters("param1") = "Hallo"

'Ergebnismenge ins RecordSet schieben

Set rs = qry.OpenRecordset
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: gsaccess am März 04, 2024, 21:17:49
Vielen Dank für eure Rückmeldungen und fachliche Unterstützung.
ZitatDer einfache Weg wird wohl sein, Du verwendest für Deinen Bericht eine ungefilterte Abfrage als Datenquelle. Macht in Summe ein Stück.

Den Filter aus dem Formular heraus übergibst Du dann als WHERE-Argument beim OpenReport.
ZitatAlso stelle Dein Kriterium zuerst zusammen, idealerweise aus einer Hand (= EIN Formular für Übersicht über das Tun), und übergib das dann an Abfrage/Bericht.
Dieser Ansatz gefällt mir sehr gut. Es ist ja nur ein Bericht, der die AuftragsNr aus verschiedenen Formularen erhalten soll. Aus der Abfrage habe ich das Kriterium gelöscht. Aber wie kann die jeweilige AuftragNr (kommt aus Formular1, oder Formular2,..) in an Abfrage/Bericht übergeben?

ZitatParameterabfrage (Querydef-Objekt) erstellen.
Parameter übergeben
Das Abfrageergebnis in ein Recordset schieben, worauf dann zugegriffen werden kann.
mit dem übermittelten code komme ich leider nicht klar. Wo soll der angepasste code stehen?

Günther
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: ebs17 am März 05, 2024, 09:02:21
DoCmd.OpenReport-Methode (Access) (https://learn.microsoft.com/de-de/office/vba/api/access.docmd.openreport)
DoCmd.OpenReport "DeinReport", acViewNormal, , "Artikelnummer = " & Me.txtArtikelnummer   'bei Long
Wie öffnest Du denn den Bericht bisher? Falls da auch OpenReport vorkommt: Wie intensiv hast Du Dir vollständige mögliche Syntax angeschaut, auch nach gegebenen Hinweisen?
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: PhilS am März 05, 2024, 14:39:21
Zitat von: andyfau am März 03, 2024, 22:13:56Das Abfrageergebnis in ein Recordset schieben, worauf dann zugegriffen werden kann.
Diese Aussage ist für mich so nicht nachvollziehbar. Kannst du das ausführlicher erläutern? - Bedenke dabei, dass man einem Bericht, anders als einem Formular, nicht direkt ein Recordset als Datenherkunft zuweisen kann.

Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: gsaccess am März 05, 2024, 18:31:54
Nochmals vielen Dank für eure Hilfe und Geduld!!
DoCmd.OpenReport "DeinReport", acViewNormal, , "Artikelnummer = " & Me.txtArtikelnummer   'bei LongGenau das ist der Code den ich brauche. Ist mir jetzt unerklärlich warum ich nicht selber dahinter gekommen bin.
Aber manches mal braucht man eben einen Schupser!? Bzw. einen fachlichen Rat! Super!!
 :)  :)
Titel: Re: Bericht aus verschiedenen Formularen aufrufen
Beitrag von: andyfau am März 08, 2024, 10:16:43
Zitat von: PhilS am März 05, 2024, 14:39:21
Zitat von: andyfau am März 03, 2024, 22:13:56Das Abfrageergebnis in ein Recordset schieben, worauf dann zugegriffen werden kann.
Diese Aussage ist für mich so nicht nachvollziehbar. Kannst du das ausführlicher erläutern? - Bedenke dabei, dass man einem Bericht, anders als einem Formular, nicht direkt ein Recordset als Datenherkunft zuweisen kann.



Sorry, ich war im falschen Film..... Ist natürlich viel einfacher beim Open Report zu filtern.
Beste Grüße
Andreas