Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

übergabe von ausgewählten paramtern an einen bericht

Begonnen von Carl, Januar 19, 2018, 08:21:53

⏪ vorheriges - nächstes ⏩

Carl

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?


Lachtaube

Berichte lassen sich analog zu Formularen durch das optionale Argument WhereCondition in der Anweisung DoCmd.OpenReport filtern.
Grüße von der (⌒▽⌒)


Carl

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

Joss

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

Carl

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

Joss

#6
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


Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

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

Carl

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

Beaker s.a.

Hallo Carl,
Beim Öffnen des Berichtes
Me.RecordSource = Forms.HfoName.UFoControlName.Form.RecordSource
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

#11
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

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

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.



Lachtaube

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
Grüße von der (⌒▽⌒)