Re: Bericht mit Aufteilung einer Abfrage



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

.



Relevant Pages

  • =?Utf-8?Q?=C3=84nderung_von_bestehenden_Aufgabe?= =?Utf-8?Q?n_per_VBA?=
    ... ich habe von mehreren öffentlichen Tasklisten einige Aufgaben in meine ... Dim olApp As Outlook.Application ... Set olApp = CreateObject ... Next by Date: ...
    (microsoft.public.de.outlook)
  • Re: SQL-Abfrage
    ... lfd_nr 2 zuordnen und auch alle Zeiten der Aufgaben ... der Person 1 der Person 2 zuordnen, aber so, dass die ID-Nummer der ... Zeiten den Id-Nummern der Aufgaben entsprechen. ... Dim Rst2 As DAO.Recordset ...
    (microsoft.public.de.access)
  • Re: Aufgabenliste in Eisenhower-Matrix
    ... 'Abgelaufene und heute zu erledigende Aufgaben ... Dim startRng As String ... Dim myDate As Date ... Dim myPrio As Long ...
    (microsoft.public.de.excel)
  • Re: Hausaufgabenhilfe
    ... Dim intUg As Integer ... Tochter anklicken könnte, welche Aufgaben (Mal, Geteilt, Plus oder Minus ... Beispiel für Ausdruck mit Ergebniskontrolle: ...
    (microsoft.public.de.excel)
  • =?Utf-8?Q?Re:_=C3=84nderung_von_bestehenden_Auf?= =?Utf-8?Q?gaben_per_VBA?=
    ... > ich habe von mehreren öffentlichen Tasklisten einige Aufgaben in meine ... > Dim olApp As Outlook.Application ... > Set objTasks = objNameSpace.PickFolder ... wie kommst Du denn auf "ItemProperties"? ...
    (microsoft.public.de.outlook)