Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: Carl am Januar 19, 2018, 08:21:53

Titel: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 19, 2018, 08:21:53
Ich habe mal eine Frage:

gegeben:
*ein HF/UFOendlos
*das HF enthält zwei Listenfelder, in denen jeweils ein Merkmal gewählt werden kann, z.B. Mitarbeiter und Kalenderwoche
* Das UFO basiert auf einer Abfrage, die die Auswahl berücksichtigt und entsprechend das UFO ansteuert.

Um die angezeigten Daten druckbar zu machen, soll nun ein Bericht per Knopfdruck erzeugbar sein, der exakt das angezeigte enthält. Das Problem ist nun die Übergabe der Auswahl an den Bericht. Ich habe keine Ahnung, wie das geht.

any suggestions?

Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 19, 2018, 08:39:02
Berichte lassen sich analog zu Formularen durch das optionale Argument WhereCondition in der Anweisung DoCmd.OpenReport (https://msdn.microsoft.com/de-de/vba/access-vba/articles/docmd-openreport-method-access) filtern.
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Joss am Januar 19, 2018, 11:05:35
Hallo Carl,

Link zu DonKarl
http://www.donkarl.com?FAQ5.9 (http://www.donkarl.com?FAQ5.9)

Gruß
Josef
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 19, 2018, 12:10:49
Die Schwierigkeit besteht darin, dass das UFO auf einer Abfrage basiert, die die in zwei Textfeldern im HF ausgewählten Kriterien berücksichtigt.

Ich möchte sozusagen den Bericht mit den selben gewählten Kriterien öffnen.

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Joss am Januar 19, 2018, 12:55:11
ZitatBerichte lassen sich analog zu Formularen durch das optionale Argument WhereCondition in der Anweisung DoCmd.OpenReport filtern.

Du musst den WHERE-Teil deiner Abfrage als Öffnungs-Filter (WhereCondition) für den Bericht verwenden.

Gruß
Josef
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 19, 2018, 13:56:27
der Where-Teil in der Abfrage, sind das die Kriterien? Also da habe ich zwei:

[Formulare]![Einsatzplan2_HF]![Liste36] und
[Formulare]![Einsatzplan2_HF]![Liste4]

woher weiß die Abfrage, was im Formular in den Listenfeldern gewählt wurde??

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Joss am Januar 19, 2018, 14:55:43
Hallo Carl,

hier ein Muster einer einfachen Abfrage mit WHERE-Teil:

SELECT *
FROM Artikel
WHERE (((Artikel.Artikelname)=[Formulare]![Artikel]![Artikelname]))
ORDER BY Artikel.[Artikel-Nr];

Das Rote ist der WHERE-Teil.
Bei dir ist dieser Teil länger.

Grobe Anleitung (ohne Details):
Und diesen WHERE-Teil (ohne das Wort WHERE) musst du als Öffnungsfilter für deinen Bericht verwenden.
Den Bezug auf deine beiden Listenfelder musst du entsprechend anpassen, je nachdem, von wo aus der Code aufgerufen wird (vom HF oder vom UF), und dann per String-Addition einfügen.

Vielleicht kann es jemand anderer im Forum besser erklären. ;)

Gruß
Josef

Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Beaker s.a. am Januar 19, 2018, 16:58:31
Hallo Carl,
Poste doch einfach den kompletten SQL-String deiner Abfrage.
Eigentlich bräuchte man aber nur die RecordSource des UFos im
Bericht zu übernehmen, die ist ja schon gefiltert.
gruss ekkehard
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 09:17:00
Ich habe den Button im Hauptformular, wo auch die zwei Listenfelder sind.


Private Sub btnBerichtA_Click()
DoCmd.OpenReport "berAEAPEinsatzplanA"
End Sub


Und das ist die funktionierende where-condition aus der Abfrage:


WHERE (((tbWochenDaten.WochenID)=[Formulare]![Einsatzplan2_HF]![Liste36]) AND ((tblmassnahmedurchgaenge.ID)=[Formulare]![Einsatzplan2_HF]![Liste4]));


Ich kriegs nicht hin, es kommt bei manchen Kombinationen die Fehlermeldung, dass sich das Feld WochenID uneindeutig auf zwei Tabellen bezieht.

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 09:20:13
Zitat von: Beaker s.a. am Januar 19, 2018, 16:58:31
Hallo Carl,
Poste doch einfach den kompletten SQL-String deiner Abfrage.
Eigentlich bräuchte man aber nur die RecordSource des UFos im
Bericht zu übernehmen, die ist ja schon gefiltert.
gruss ekkehard

Hallo ekkehard,

hier der komplette String der Abfrage:


SELECT tbWochenDaten.*, tbWochenDaten.WochenID, tblmassnahmedurchgaenge.ID, tblmassnahmedurchgaenge.Maßnahmedurchgang, tblTeilnehmer.AEAPTeilnehmerinfosKurz, tblTeilnehmer.AEAPKurzerprobungsbereichKurz, tblTeilnehmer.TeilnehmerAkronym, tblTeilnehmer.AEAPProjekt, tblTeilnehmer.AEAPFragestellung, tbWochenDaten.WochenMemo
FROM tblmassnahmedurchgaenge RIGHT JOIN (tblTeilnehmer INNER JOIN tbWochenDaten ON tblTeilnehmer.ID = tbWochenDaten.TeilnehmerID) ON tblmassnahmedurchgaenge.ID = tblTeilnehmer.massnahmeDurchgang
WHERE (((tbWochenDaten.WochenID)=[Formulare]![Einsatzplan2_HF]![Liste36]) AND ((tblmassnahmedurchgaenge.ID)=[Formulare]![Einsatzplan2_HF]![Liste4]));


Wie kann man eine schon gefilterte RecordSource eines UFos in einen Bericht übernehmen?

Carl
Bericht zu übernehmen
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Beaker s.a. am Januar 21, 2018, 16:03:42
Hallo Carl,
Beim Öffnen des Berichtes
Me.RecordSource = Forms.HfoName.UFoControlName.Form.RecordSource
gruss ekkehard
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 16:18:41
Es funktioniert nicht. Mann, wenn ich doch nur ein Bisschen begabter wäre!

So sieht mein Code "beim öffnen" aus.

Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Forms.Einsatzplan2_HF.Einsatzplan2_UF_TN.Form.RecordSource
End Sub


Fehler 2465

Was ist denn "UFoControlName"? Nur der Name vom UFO oder eine Funktion? Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Beaker s.a. am Januar 21, 2018, 16:24:37
Control = Steuerelement
siehe http://www.donkarl.com?FAQ4.2 (http://www.donkarl.com?FAQ4.2)
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 16:38:32
Ich komme durch einander. Im Hauptformular sind zwei Listenfelder.

Hauptformular: Einsatzplan2_HF
Steuerelement im Hauptformular: Teilnehmer_UF
Unterformular: Einsatzplan2_UF_TN

und dann die zwei Listenfelder:
Liste36
Liste4

Das Button zum Öffnen des Berichts ist im Hauptformular und öffnet normal mit VBA.


Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 21, 2018, 17:47:09
In der Abfrage selbst ist das Feld WochenID schon 2x vorhanden, was die Fehlermeldung verursacht haben könnte.

Carl, ich zweifle Deine Begabung nicht an. Du machst Dir das Access-Leben nur unnötig schwer. Wenn Du ernsthaft Datenbanken mit Access entwickeln willst, kommst Du um SQL-Grundkenntnisse einfach nicht herum.
SELECT w.*,
       d.ID,
       d.Maßnahmedurchgang,
       t.AEAPTeilnehmerinfosKurz,
       t.AEAPKurzerprobungsbereichKurz,
       t.TeilnehmerAkronym,
       t.AEAPProjekt,
       t.AEAPFragestellung,
       w.WochenMemo
FROM   tblmassnahmedurchgaenge d
       RIGHT JOIN (tblTeilnehmer t
                   INNER JOIN tbWochenDaten w
                           ON t.id = w.TeilnehmerID)
               ON d.iID = t.massnahmeDurchgang
WHERE  w.WochenID = [Formulare]![Einsatzplan2_HF]![Liste36] AND
             d.ID = [Formulare]![Einsatzplan2_HF]![Liste4];
Warum man seine Steuerelemente Liste36 und Liste4 tauft  und anderen hier im Forum den SQL-Text unformatiert vorwirft, ist mir schleierhaft. Das sind Dinge der Konzentration und Selbstdisziplin und hat mit Begabung nichts zu tun. Frei nach dem Motto: wer mir helfen will, kann schließlich selbst die Abfrage in lesbare Form bringen - einen Editor wird er ja schließlich haben.

Ansonsten lautet die korrekte Syntax:Private Sub Report_Open(Cancel As Integer)
   Me.RecordSource = Forms!Einsatzplan2_HF.Einsatzplan2_UF_TN.Form.RecordSource
End Sub
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 17:55:13
Hier mal eine Beispieldatei. Ich kriegs nicht hin und mache vermutlich an mehreren Stellen Fehler.
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 21, 2018, 18:10:31
Zitat von: Lachtaube am Januar 21, 2018, 17:47:09
Warum man seine Steuerelemente Liste36 und Liste4 tauft  und anderen hier im Forum den SQL-Text unformatiert vorwirft, ist mir schleierhaft. Das sind Dinge der Konzentration und Selbstdisziplin und hat mit Begabung nichts zu tun. Frei nach dem Motto: wer mir helfen will, kann schließlich selbst die Abfrage in lesbare Form bringen - einen Editor wird er ja schließlich haben.

Sorry :-(
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Beaker s.a. am Januar 21, 2018, 18:15:50
ZitatHauptformular: Einsatzplan2_HF
Steuerelement im Hauptformular: Teilnehmer_UF
Unterformular: Einsatzplan2_UF_TN
Demnach
Forms!Einsatzplan2_HF.Teilnehmer_UF.Form.RecordSource
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 21, 2018, 18:35:30
Weil die Bezüge schon in der Berichtsabfrage fest verdrahtet sind, ist die Anweisung überflüssig. Du musst die doppelte WochenID aus abfWochendatenGewaehlteWoche2 entfernen.

Und außerdem heißt Dein Unterformular frmTeilnehmerzuordnungUFO2, was aber jetzt egal ist, und das Hauptformular benötigt auch keine RecordSouce (Datenherkunft), weil es nur als Container dient.
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 22, 2018, 09:21:17
Zitat von: Lachtaube am Januar 21, 2018, 18:35:30
Weil die Bezüge schon in der Berichtsabfrage fest verdrahtet sind, ist die Anweisung überflüssig. Du musst die doppelte WochenID aus abfWochendatenGewaehlteWoche2 entfernen.

Darf ich nochmal nachfragen?

Welche Anweisung ist überflüssig?

Und wo steht eine doppelte WochenID? In der Abfrage sehe ich nur eine.

Zitat von: Lachtaube am Januar 21, 2018, 18:35:30
Und außerdem heißt Dein Unterformular frmTeilnehmerzuordnungUFO2, was aber jetzt egal ist, und das Hauptformular benötigt auch keine RecordSouce (Datenherkunft), weil es nur als Container dient.

Es ist für mich nur schwer verständlich, wenn ich es nicht sehe. Kannst Du mir das bitte in der angehängten Datei eintragen, damit ich es am Beispiel erlernen kann?

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 22, 2018, 09:42:41
Hier SELECT tbWochenDaten.*, tbWochenDaten.WochenID, ... wird die WochenID in die Feldliste 2x aufgenommen.

Der VBA-Code im Bericht ist unnötig, weil sich die gespeicherte Abfrage ja schon auf die Formularparameter der Abfrage bezieht und dadurch die Daten entsprechend einschränkt.

Verwende den Abfragetext aus meiner ersten Antwort hier im Thread für die Abfrage (kopieren und in die SQL-Ansicht einer Abfrage einfügen).
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Beaker s.a. am Januar 22, 2018, 14:38:57
Hallo Carl,
Sorry, von einer gespeicherten Abfrage war ich nicht ausgegangen
(habe mir die DB nicht angeschaut  :( )
Somit folge Lachtaubes Anmerkungen.
gruss ekkehard
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 22, 2018, 19:43:22
Also ich habe jetzt den doppelten Bezug auf "WochenID" entfernt. abfWochendatenGewaehlteWoche2 sieht jetzt so aus:


SELECT tbWochenDaten.WochenID, tblmassnahmedurchgaenge.ID, tblmassnahmedurchgaenge.Maßnahmedurchgang, tblTeilnehmer.AEAPTeilnehmerinfosKurz, tblTeilnehmer.AEAPKurzerprobungsbereichKurz, tblTeilnehmer.TeilnehmerAkronym, tblTeilnehmer.AEAPProjekt, tblTeilnehmer.AEAPFragestellung, tbWochenDaten.WochenMemo, tbWochenDaten.MoMemo, tbWochenDaten.DiMemo, tbWochenDaten.MiMemo, tbWochenDaten.DoMemo, tbWochenDaten.FrMemo
FROM tblmassnahmedurchgaenge RIGHT JOIN (tblTeilnehmer INNER JOIN tbWochenDaten ON tblTeilnehmer.ID = tbWochenDaten.TeilnehmerID) ON tblmassnahmedurchgaenge.ID = tblTeilnehmer.massnahmeDurchgang
WHERE (((tbWochenDaten.WochenID)=[Formulare]![Einsatzplan2_HF]![Liste36]) AND ((tblmassnahmedurchgaenge.ID)=[Formulare]![Einsatzplan2_HF]![Liste4]));


Dann habe ich eine neue Abfrage als abfWochendatenGewaehlteWoche2i gewählt und in der SQL-Ansicht hinein kopiert:


SELECT w.*,
       d.ID,
       d.Maßnahmedurchgang,
       t.AEAPTeilnehmerinfosKurz,
       t.AEAPKurzerprobungsbereichKurz,
       t.TeilnehmerAkronym,
       t.AEAPProjekt,
       t.AEAPFragestellung,
       w.WochenMemo
FROM   tblmassnahmedurchgaenge d
       RIGHT JOIN (tblTeilnehmer t
                   INNER JOIN tbWochenDaten w
                           ON t.id = w.TeilnehmerID)
               ON d.iID = t.massnahmeDurchgang
WHERE  w.WochenID = [Formulare]![Einsatzplan2_HF]![Liste36] AND
             d.ID = [Formulare]![Einsatzplan2_HF]![Liste4];


Darauf basiert dann das Formular?

Wenn ich das öffne, kommen Fehlermeldungen, dass er die Parameterwerte nicht finden kann.

Kannst Du es mir bitte in der hochgeladenen Datei beispielhaft einrichten, damit ich es mir in Ruhe ansehen und lernen kann?

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 22, 2018, 20:29:34
Dann bleibt mir ja wohl nichts anderes übrig. :)
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Carl am Januar 23, 2018, 12:40:06
ah, vielen vielen Dank :-) Und sag mal, wieso heißen die Tabellen in der Abfrage jetzt d, t, w ? Ist das nur eine optische Korrektur oder ist das notwendig?

Carl
Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: PhilS am Januar 23, 2018, 13:19:38
Zitat von: Carl am Januar 23, 2018, 12:40:06
wieso heißen die Tabellen in der Abfrage jetzt d, t, w ? Ist das nur eine optische Korrektur oder ist das notwendig?
Wenn die Abfrage dem SQL entspricht, was du vorher hier gepostet hast, dann ist es nur eine kosmetische Änderung um das SQL einfacher und übersichtlicher zu schreiben.
Diese "Ersatznamen" nennt man Alias. - Weiterführende Informationen zu Aliasen (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=sql-as-alias).

Titel: Re: übergabe von ausgewählten paramtern an einen bericht
Beitrag von: Lachtaube am Januar 23, 2018, 15:41:06
In der von mir hier geposteten Abfrage hat sich noch ein Tipp-Fehler meinerseits eingeschlichen.
ON d.iID = t.massnahmeDurchgang enthält an rot markierter Stelle ein i zuviel. Und das Wochenmemo ist mir auch noch als Doublette aufgefallen und wurde eliminiert. Im Anhang habe ich dann auch noch an zwei Stellen in Tabellen ß gegen ss getauscht.