Re: Bericht mit Aufteilung einer Abfrage
- From: "Henry Habermacher [MVP Access]" <DontSpamHenry@xxxxxxxxxxxxxx>
- Date: Mon, 26 Mar 2007 10:38:32 +0700
Hallo Kenny
Bitte verwende hier den vollen Realnamen, Danke
quoting kenny:
Ich habe 2 Tabellen; eine mit 10 Personen und eine mit 105 Aufgaben.
Jetzt will ich einen Bericht schreiben, der mir für jede Person eine
eigene Seite im Bericht schreibt, jeder gleich viele Aufgaben. Also
Seite 5: Person5 hat folgende Aufgaben: A41,A42...A50
Ich brauche also eine Abfrage die je abgerundet 105:10 Einträge aus
der Aufgabentabelle einer Zeile aus der Personentabelle zuordnet. Im
Bericht soll dann die Person auftauchen und alle zugeordneten
Einträgen. Die Werte (105, 10) sind beispielhaft, müsste selbst aus
den Tabellen errechnet werden. Die im Bsp. letzten 5 Aufgaben kann ich
dann manuell zuordnen.
Da Du vermutlich später noch herausfinden möchtest, wem Du welche Aufgabe zugeteilt hast, ist das eine Information, welche Du in die Datenbank speichern solltest. Du benötigst also eine neue Tabelle, welche etwa so aufgebaut sein könnte:
(Statement in eine neue Query in der SQL Ansicht einfügen, Namen anpassen und laufen lassen)
CREATE TABLE ZugeteilteAufgaben
(
PersonID LONG
CONSTRAINT ZugeteilteAufgaben_Personen
REFERENCES Personen(PersonID),
AufgabeID LONG
CONSTRAINT ZugeteileAufgaben_Aufgaben
REFERENCES Aufgaben(AufgabeID),
ZugeteiltAm DATE,
CONSTRAINT ZugeteilteAufgaben_PK
PRIMARY KEY (PersonID, AufgabeID, ZugeteiltAm)
)
Nun kannst Du vor dem Erzeugen des Reports per VBA eine Personenzuteilung vornehmen, indem du diese Tabelle füllst.
Hier eine Beispiel Funktion, welche as machen könnte (in ein neues Standard Modul einfügen):
'Code Begins here
Option Compare Database
Option Explicit
Public Function teileAufgabenZu()
Dim db As Database
Dim rstPe As Recordset
Dim rstAu As Recordset
Dim rstPeAu As Recordset
Dim lngAnzPe As Long
Dim lngAnzAu As Long
Dim lngAnzAuJePe As Long
Dim P As Long
Dim A As Long
Dim dteZeitpunkt As Date
Set db = CurrentDb()
Set rstPe = db.OpenRecordset( _
"SELECT PersonID FROM Personen", _
dbOpenSnapshot)
Set rstAu = db.OpenRecordset( _
"SELECT AufgabeID FROM Aufgaben", _
dbOpenSnapshot)
'Anzahl Personen bestimmen
rstPe.MoveLast
lngAnzPe = rstPe.RecordCount
If lngAnzPe = 0 Then
Exit Function
End If
rstPe.MoveFirst
'Anzahl Aufgaben bestimmen
rstAu.MoveLast
lngAnzAu = rstAu.RecordCount
If lngAnzAu = 0 Then
Exit Function
End If
rstAu.MoveFirst
'Anzahl zuzuteilende Aufgaben je Person bestimmen
lngAnzAuJePe = lngAnzAu \ lngAnzPe
'Zuteilung vornehmen
dteZeitpunkt = Now()
Set rstPeAu = db.OpenRecordset( _
"SELECT * FROM ZugeteilteAufgaben", _
dbOpenDynaset)
For P = 1 To lngAnzPe
For A = 1 To lngAnzAuJePe
With rstPeAu
.AddNew
!PersonID = rstPe!PersonID
!AufgabeID = rstAu!AufgabeID
!ZugeteiltAm = dteZeitpunkt
.Update
End With
rstAu.MoveNext
Next
rstPe.MoveNext
Next
rstPeAu.Close
rstPe.Close
rstAu.Close
Set rstPeAu = Nothing
Set rstPe = Nothing
Set rstAu = Nothing
Set db = Nothing
End Function
'Code Ends here
Nun wird der Report ziemlich einfach und basiert einfach auf einer Join-Abfrage zwischen Personen, Aufgaben und ZugeteiltenAufgaben. Du gruppierst den Berich nach PersonID und stellst beim Gruppenkopf ein, dass Du einen Seitenumbruch vor jeder Gruppe haben willst.
Übrigens: Falls Du eine zufällige Reihenfolge für die Aufgaben haben willst, dann wird das SQL Statement in rstAU ein bisschen komplizierter. Wie sowas geht ist in der FAQ zum Thema "zufällige Reihenfolge" beschrieben.
Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com
OH: Online Hilfe (Taste F1)
Downloads: http://www.dbdev.org
.
- Follow-Ups:
- Re: Bericht mit Aufteilung einer Abfrage
- From: Henry Habermacher [MVP Access]
- Re: Bericht mit Aufteilung einer Abfrage
- References:
- Bericht mit Aufteilung einer Abfrage
- From: kenny
- Bericht mit Aufteilung einer Abfrage
- Prev by Date: Re: Schon wieder Magnetkarten
- Next by Date: Re: Bericht mit Aufteilung einer Abfrage
- Previous by thread: Bericht mit Aufteilung einer Abfrage
- Next by thread: Re: Bericht mit Aufteilung einer Abfrage
- Index(es):
Relevant Pages
|