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
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 ... " ?????????????
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 ...?
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.
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.
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)
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 ...
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 ..
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?
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.
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_ID | Name | Vorname | Gruppen_ID |
1 | Mustermann | Max | 1 |
2 | Musterfrau | Marion | 1 |
3 | Musterkind | Martin | 2 |
Tabelle 2 (Gruppen)
Gruppen_ID | Gruppenname |
1 | Mustereltern |
2 | Musterkinder |
Tabelle 3 (Werte)
Personen_ID | Zahl 1 | Zahl 2 | Zahl 3 | Monat | Jahr |
1 | 50 | 100 | 150 | 1 | 2011 |
1 | 20 | 40 | 60 | 2 | 2011 |
2 | 10 | 10 | 10 | 1 | 2011 |
2 | 500 | 400 | 300 | 2 | 2011 |
3 | 5 | 10 | 20 | 1 | 2011 |
3 | 7 | 4 | 21 | 2 | 2011 |
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ß.
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.
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