Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bericht & Unterbericht: Abfrage mit Variable

Begonnen von Big Master D, März 11, 2011, 23:33:16

⏪ vorheriges - nächstes ⏩

Big Master D

Liebe Foren-Gemeinde,

ich bin ganz neu hier, haben unendlich viel gelesen und leider immer noch keine Lösung für mein Problem gefunden. Vielleicht hat jemand einen hilfreichen Tipp für folgendes Problem:

Ich habe einen relativ umfangreichen Bericht erstellt, der verschiedenste Daten darstellt. Diese Daten sind abhängig von einem Monat/Jahr. Die zugrunde liegenden SQL-Abfragen beinhalten "Variablen". Soll heissen, ich habe dort einfach Where-Statements eingefügt, für die Access beim Öffnen des Berichts Dialogfelder zur Eingabe der Variablen-Werte anzeigt. So kann man Monat/Jahr von Hand eingeben. Das funktioniert gut.

Nun habe ich aber auch ein bzw. zwei Unterberichte in meinen Hauptbericht eingefügt. Diese Unterberichte basieren wieder auf Abfragen, für welche eine Monat/Jahr-Kombination benötigt wird. Die SQL-Abfragen habe ich entsprechend erstellt. Aber, wenn ich jetzt meinen Hauptbericht aufrufe, werde ich mehrfach nach einem Monat und einem Jahr gefragt. Nämlich so oft, wie die einzelnen Berichte auftreten bzw. aufgerufen werden. So muss ich jetzt bis zu 100x einen Monat und ein Jahr eintippen. Das kann ganz schön lästig werden.

Kann man das elegant lösen? Eigentlich möchte ich doch nur, dass man einmalig beim Öffnen des Hauptberichtes einen Monat und ein Jahr eingeben muss und das diese Werte in allen Abfragen und Berichten genutzt werden können. Zu Hilfe ....

Viele Grüße BMD

DF6GL

Hallo,

benutz die Eigenschaften "Verknüpfen von/nach" der UB-Steuerelementes zur "Übergabe" des Datums. Wirf aber die Parameter aus den UB-Abfragen heraus.


"..bis zu 100x ... "  ?????????????

Big Master D

Danke für die schnelle Antwort. Klingt gut, habe aber noch eine Detailfrage. Hier meine Rahmenbedingungen:

Hauptbericht basiert auf Abfrage 1:
In dieser werden Personendaten ausgelesen, die sich pro Monat/Jahr verändern können. Eine Person gehört zu einer Gruppe.

Unterbericht basiert auf Abfrage 2:
Hier werden Daten für die Gruppe der jeweiligen Person (aus dem Hauptbericht ausgelesen).

Wie verknüpfe ich das genau? Im Hauptbericht, im Unterbericht ...?

DF6GL

Hallo,

1) in den Berichtsabfragen werden KEINE Gruppierungen vorgenommen, das passiert ALLEIN im Bericht (Fenster "Gruppieren/Sortieren").  Genauso enthalten die Berichtsabfragen KEINE Kriterienangaben (Abfrageparameter).

2) In den "Berichten" selber wird gar nichts verknüpft.  Die UFO/UB-Steuerelemente in einem (Haupt-)Bericht , mit denen jeweils ein (Unter-)Bericht angezeigt wird, haben die Eigenschaften "Verknüpfen von/nach", die mit den entspr. Schlüsselfeldnamen zu versehen sind.
Dabei ist eine normalisierte Tabellenstruktur vorausgesetzt.


3)  Das Öffnen des (Haupt-)Berichtes erfolgt in einer VBA-Ereignisprozedur (Schaltflächen-Klick)  mittels der Openreport-Methode, wobei in deren "Where-Condition"-Parameter die akt. nötigen Filterkriterien übergeben werden.

Big Master D

Oh je, da habe ich mich wohl falsch ausgedrückt. Laßt mich mal kurz meine DB-Struktur ansatzweise skizzieren:

Tabelle 1 (Personendaten)
- Personen_ID
- Name
- Vorname
- Gruppen_ID
- etc.

Tabelle 2 (Gruppen)
- Gruppen_ID
- Gruppenname

Tabelle 3 (Werte)
- Personen_ID
- Zahl 1
- Zahl 2
- Zahl 3
- Monat
- Jahr

Jetzt zu meinem Bericht. Ich habe einen Hauptbericht, der für jede Person verschiedene Daten auf einer Seite ausgiebt. Dafür gibt es eine Abfrage, die dem Bericht zugrunde liegt, und die "Monat" und "Jahr" als Where-Kriterien enthält. Das fordet Access beim Aufrufen des Berichts ab. Wie ich in der letzten Antwort lese, sollte man das so wohl nicht machen.

Nun gibt es zusätzlich noch einen Unterbericht, der pro Person aufgerufen werden soll. Hier werden im Wesentlichen Zahlen summiert, die in Tabelle 3 stehen. Dazu bedarf es wieder einer Monats- und Jahres-Angabe, die entsprechend in der dem Unterbericht zugrunde liegenden Abfrage eingebaut sind. Die fragt Access folglich auch beim Aufrufen des Berichts ab.

Das führt aber dazu, dass beim Aufrufen des Hauptberichts (mit seinem Unterbericht) mehrfach nach Monat und Jahr gefragt wird. Da wird man beim Eingeben verrückt und das ist natürlich nicht elegant. Ich denke meine Frage läßt sich darauf reduzieren, wie man einem Bericht eine oder mehrere feste Variable beim Öffnen übergeben kann, die dann im Bericht, etwaigen Unterberichten und allen diesen zugrunde liegenden Abfragen genutzt werden können.

DF6GL

#5
Hallo,



erstell eine verknüpfende Abfrage (ohne Parameter) über  alle Tabellen , gruppiere nach Gruppen_ID und setz die Felder aus Tabelle 3 und Tabelle1 in den Detailbereich.
Dazu brauchst Du keinen Unterbericht.

Beim Öffnen des Berichtes übergibst Du die 3 Kriterienwerte (Gruppen_ID, Monat, Jahr) der Openreport-Methode.

andere Möglichkeit ist, "Monat" und "Jahr" als Felder in den Hauptbericht zu übernehmen und im UB-Steuerelement über die 3 Felder "Person_ID", "Monat" und "Jahr" zu verknüpfen.


(btw: Monat und Jahr sind reservierte Wörter und sind tunlichst als Name für Felder oder dergleichen zu vermeiden)

Big Master D

Hallo und danke für die nette Antwort. Das klingt ja schon mal gut, aber ich sehe folgende Probleme (die vielleicht gar keine sind ....):

1. Wenn ich eine verknüpfende Abfrage erstelle und nach Gruppen_ID gruppiere, dann wird der Bericht doch nur noch eine Seite pro Gruppe generieren, oder? Ich benötige aber eine Seite pro Person und dann am Ende Details der Gruppe, zu der diese Person gehört.

2. Ich möchte gar nicht die Gruppe beim Öffnen des Berichts manuell eingeben müssen. Tatsächlich ist die Info der Gruppenzugehörigkeit ja in der Datenbank. Imho dachte ich, das kann automatisch ermittelt und ausgegeben werden. Richtig, falsch?

Ich habe übrigens auch schmerzlich erfahren, dass Monat und Jahr keine guten Namen sind. Ich benutze jetzt Monats-Angabe und Jahres-Angabe ...

DF6GL

Hallo,

dann gruppiere halt nach der Person_ID ..


"dann wird der Bericht doch nur noch eine Seite pro Gruppe generieren"


wer sagt das?

Die einzelnen Bereiche haben die Eigenschaft "Neue Seite", die entspr. eingestellt werden kann.



"Ich benutze jetzt Monats-Angabe und Jahres-Angabe ..."


und dadran sind jetzt die Sonderzeichen anzumeckern    :o 8)


Ich nehme nicht an, dass Du von "Monats"  "Angabe" subtrahieren willst ..

Big Master D

Okay, ich habe also die verknüpfende Abfrage gruppiert nach Person_ID und erstelle darauf basierend einen Bericht. Dann geht der Bericht doch das Ergebnis der Abfrage Datensatz für Datensatz durch, mithin Person für Person. Ich lasse also auf meiner ersten Berichtsseite lauter Daten der Person ausgeben. Am Ende der Seite möchte ich dann aber nicht mehr nur Daten dieser Person ausgeben, sondern Daten von der Gruppe, zu der diese Person gehört. Dabei will ich unter anderem auch Summen bilden (z.B. Zahl 1 aus Tabelle 3 von allen Personen, die zu der Gruppe gehören). Dazu habe ich immer separate Abfragen erstellt. Kann ich denn auch eine Summe aus einer bereits erfolgten Abfrage erstellen?

DF6GL

HAllo,

also, ich versteh nicht, was Du alles aus der gezeigten Tabellenstruktur herausbekommen willst.


Wenn Du über eine Personengruppe Berechnungen anstellen willst , dann mußt Du auch im Bericht nach der Gruppe_ID gruppieren.  Nach etwas Anderem zu gruppieren, bringt hier keinen Sinn, da Tabelle1 und Tabelle 3 in einer 1:1-Beziehung stehen, die an sich fragwürdig/falsch ist.

Deine "Seitenanforderung" kannst Du erst mal hinten anstellen, weil eine solche Berichtsformatierung völlig nebensächlich/sekundär ist.

Big Master D

Hallo,

vielen Dank für Deine Bemühungen. Also, Tabelle 1 und 3 haben aus meiner Sicht eine 1:n Beziehung. Pro Person können für verschiedene Monate/Jahre Werte hinterlegt werden. Das passiert auch.

Ich versuche mal Beispielwerte und einen Beispielbericht hier darzustellen:

Tabelle 1 (Personendaten)





Personen_IDNameVornameGruppen_ID
1MustermannMax1
2MusterfrauMarion1
3MusterkindMartin2

Tabelle 2 (Gruppen)




Gruppen_IDGruppenname
1Mustereltern
2Musterkinder

Tabelle 3 (Werte)








Personen_IDZahl 1Zahl 2Zahl 3MonatJahr
15010015012011
120406022011
210101012011
250040030022011
35102012011
3742122011

Nun zu dem Bericht, der pro Person so ungefähr aussehen soll

Details Person:
[Name, Vorname]
[Gruppenname]

[Zahl 1] [Zahl 2] [Zahl 3] (aus aktuellem Monat, z.B. 2/2011)
[Zahl 1] [Zahl 2] [Zahl 3] (summiert für das aktuelle Jahr -> also Werte aus 1/2011 + 2/2011)


Details Gruppe:
[Gruppenname]

[Zahl 1] [Zahl 2] [Zahl 3] (aus aktuellem Monat, z.B. 2/2011 -> aber für die ganze Gruppe)
[Zahl 1] [Zahl 2] [Zahl 3] (summiert für das aktuelle Jahr -> also Werte aus 1/2011 + 2/2011 -> aber für die ganze Gruppe)



Nun mal ein Beispiel für Person 1 (Max Maustermann) für 2/2011:

Details Person:
Mustermann, Max
Mustereltern

20 40 60
70 140 210


Details Gruppe:
Mustereltern

520 440 360
580 550 520

Ist das nachvollziehbar, was ich hier dargestellt habe?

Nochmals danke und Gruß.

DF6GL

Hallo,

nun gut, wenn "Personen_ID" der Fremdschlüssel und nicht der Primärschlüssel (der dann fehlen würde) in Tabelle "Werte" ist.

Ansonsten sollte der Bericht mit der vorgeschlagenen verknüpfenden Abfrage und der Gruppierung nach Gruppen_ID schon so erstellebar sein.



Evtl. braucht es zusätzlich eine Gruppierungsebene nach "Jahr" , um die Summen der Gruppe auf das Jahr bezogen zu erledigen.  Alternativ könnten auch mittels DSum() (mit Übergabe der passenden Kriterien die Summen direkt aus den Tabellendaten berechnet werden.

Big Master D

Okay, vielen Dank für die Hilfe bis hierher. Ich werde heute (eher morgen) mal intensiv "basteln" und berichte gerne, ob ich es hinbekommen habe. Wenn weitere Fragen auftreten, würde ich mich gerne wieder melden.

Danke + Gruß
BMD