Neuigkeiten:

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

Mobiles Hauptmenü

Bericht auf Basis einer Pivot-Tabelle

Begonnen von gromax, November 20, 2015, 19:52:11

⏪ vorheriges - nächstes ⏩

gromax

Liebe Access-Profis,

wieder mal steh ich vor einem Berg und brauche Hilfe, um rüber zu kommen.

Vorgabe
In einer Abfrage ("qry_STATChronik" - vgl. Query.jpg bzw. QueryDef.jpg) habe ich die Anzahlen von Bescheiden aufgeschlüsselt nach den festgestellten Maßnahmen (Zeilen: Inklusive Beschulung - Probezeit - Regelbeschulung -...) und dem jeweiligen Schuljahr (Spalten 2015/16 - 2014/15 - 2013/14 - ...), in dem der Bescheid erstellt wurde, zusammengestellt.

siehe SQL:

TRANSFORM Count(tbl_BEARBEITUNG_SCH_VER.UMS_FS) AS AnzahlvonUMS_FS
SELECT tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang
FROM tbl_UMSETZUNGEN INNER JOIN (tbl_SONDERPAEDAGOGIK INNER JOIN (tbl_SCHULARTEN INNER JOIN ((tbl_NATIONEN INNER JOIN tbl_SCHUELER ON tbl_NATIONEN.NAT_PS = tbl_SCHUELER.NAT_FS) INNER JOIN ((tbl_LANDKREISE INNER JOIN tbl_EINRICHTUNGEN ON tbl_LANDKREISE.LKR_PS = tbl_EINRICHTUNGEN.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER ON tbl_EINRICHTUNGEN.EIN_PS = tbl_BEARBEITUNG_SCH_VER.EIN_FS) ON tbl_SCHUELER.SuS_PS = tbl_BEARBEITUNG_SCH_VER.SuS_FS) ON tbl_SCHULARTEN.SCM_PS = tbl_EINRICHTUNGEN.SCM_FS) ON tbl_SONDERPAEDAGOGIK.SOP_PS = tbl_BEARBEITUNG_SCH_VER.SOP_FS) ON tbl_UMSETZUNGEN.UMS_PS = tbl_BEARBEITUNG_SCH_VER.UMS_FS
GROUP BY tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang
PIVOT tbl_BEARBEITUNG_SCH_VER.BEA_SchjBeginn;


Die Spaltenköpfe im Bericht lasse ich per VBA erstellen:

'aktuelles Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If

'vorheriges Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
  strSchj_1 = Right$(lngY - 2, 4) & "/" & Right$(lngY - 1, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj_1 = Right$(lngY - 1, 4) & "/" & Right(lngY, 2)
End If
...
Me.lbl_Schj0 = strSchj0
Me.lbl_Schj_1 = strSchj_1
...


In der Berichtsansicht werden so die letzten 10 Schuljahre dargestellt und im nächsten Schuljahr fällt das 11 Jahre zurückliegende Schuljahr aus der Liste (vgl. QueryReport.jpg); statt 2015/16 steht an dieser Stelle dann 2016/17.

Wie kann man denn die Werte aus der Kreuztabelle so in die Textfelder einlesen, dass diese korrekt von Jahr zu Jahr mit der Überschrift "mitwandern"?

Viele Grüße
gromax

gromax

Liebe Access-Profis,

fortsetzend meiner Fragestellung habe ich viel ausprobiert und bin auf eine Teillösung gestoßen:

Wenn ich in den Code folgende Zeile eintrage:


Me.Daten0.ControlSource = [strSchj0]

- "Daten0" ist der Namen des betreffende Textfeldes innerhalb des Berichts -

dann werden die Detail-Daten korrekt abgebildet.

Jetzt lädt aber der Bericht die Zuweisungen

Me.lbl_Schj0 = strSchj0
Me.lbl_Schj_1 = strSchj_1
Me.lbl_Schj_2 = strSchj_2
Me.lbl_Schj_3 = strSchj_3
Me.lbl_Schj_4 = strSchj_4
Me.lbl_Schj_5 = strSchj_5
Me.lbl_Schj_6 = strSchj_6
Me.lbl_Schj_7 = strSchj_7
Me.lbl_Schj_8 = strSchj_8
Me.lbl_Schj_9 = strSchj_9


nicht mehr. Auch die Überschrift des Berichts ("Staatliches Schulamt Saalhoff ..." - vgl. QueryReport.jpg), die ich über eine öffentliche Variable bereit gestellt habe,

Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten Jahren"

wird nicht mehr geladen.

Welche Auswirkung hat denn die Code-Zeile mit dem Ausdruck "ControlSource" in Verbindung mit den übrigen Zuweisungen?

Für Hilfen bin ich immer dankbar!

Viele Grüße
gromax

gromax

Hallo Access-Profis,

nun bin ich fast am Ziel; die Antwort auf das im 2. Beitrag aufgeworfene Problem habe ich durch die Umstellung der Reihenfolge innerhalb des Codes gelöst:

Me.Daten0.ControlSource = [strSchj0]       'Anzeige der Werte für das aktuelle Schuljahr
Me.Daten_1.ControlSource = [strSchj_1]   'Anzeige der Werte für das vorherige Schuljahr
Me.Daten_2.ControlSource = [strSchj_2]   'Anzeige der Werte für das vorvorherige Schuljahr
Me.Daten_3.ControlSource = [strSchj_3]   'usw
Me.Daten_4.ControlSource = [strSchj_4]

Me.lbl_Schj0 = strSchj0        'Beschriftung in der Seitenüberschrift mit dem aktuellen Schuljahr
Me.lbl_Schj_1 = strSchj_1    'Beschriftung in der Seitenüberschrift mit dem vorherigen Schuljahr
Me.lbl_Schj_2 = strSchj_2    'Beschriftung in der Seitenüberschrift mit dem vorvorherigen Schuljahr
Me.lbl_Schj_3 = strSchj_3    'usw
Me.lbl_Schj_4 = strSchj_4
Me.lbl_Schj_5 = strSchj_5
Me.lbl_Schj_6 = strSchj_6
Me.lbl_Schj_7 = strSchj_7
Me.lbl_Schj_8 = strSchj_8
Me.lbl_Schj_9 = strSchj_9

Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten Jahren"   'Berichtsüberschrift - Titel


Jetzt funktioniert es fast so, wie ich es brauche (vgl. QueryReport2), lediglich die Teilsummen pro Landkreis (BBK und GOB) bzw. die Gesamtsummen kann ich nicht per VBA in die Textfelder eintragen.
Kann mir hier jemand einen Tipp geben, wie ich beim Load-Ereignis die Textfelder mit den entsprechenden Summen-Funktionen versehe.

Vorab vielen Dank!

Viele Grüße
gromax

MaggieMay

Hi,

kennst du die Musterlösung für Kreuztabellen-Berichte in Roger's Access Library? Die sollte hier wohl weiterhelfen.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay, hallo Access-Profis,

die Seite von Roger' Library habe ich mir angeschaut und auch einen interessanten Ansatz in der Datei CrossTabReport2k gefunden, doch kann ich diesen auf meinen Bericht nicht übertragen - mir ist das schlichtweg zu professionell und daher auch zu komplex.
Ich bin meinen Weg ein Stück weitergekommen und zwar:

'>>>>>>>>>>>>>>>>>>>>>>>>>>>Berechnung der Schuljahre>>>>>>>>>>>>>>>>>>>>>>>

lngY = Year(Date)

If Date < DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Übertrag in die Textfelder des Detailbereichs>>>>>>>>>>>>>>>>>>>>>>>

Me.lbl_Daten0.ControlSource = [strSchj0]
...
'>>>>>>>>>>>>>>>>>>>>Teilsummen im Fußberreich>>>>>>>>>>>>>>>>>>>>>>>

If IsEmpty(Me.lbl_Daten0) Then
  Me.lbl_SumGruppe0.ControlSource = ""
  Else
  Me.lbl_SumGruppe0.ControlSource = "=Sum([" & strSchj0 & "])"
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Gesamtsummen im Berichtsfuß>>>>>>>>>>>>>>>>>>>>>>>
If IsEmpty(Me.lbl_Daten0) Then
  Me.lbl_SumTotal0.ControlSource = ""
  Else
  Me.lbl_SumTotal0.ControlSource = "=Sum([" & strSchj0 & "])"
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>Schuljahre in den Spaltenüberschriften>>>>>>>>>>>>>>>>>>>>>>>

Me.lbl_Schj0 = strSchj0



Die Darstellung des Berichts funktioniert nur solange, solange die Felder in der Abfrage für die einzelnen Spalten (Schuljahre) auch Daten liefern. Ist ein Schuljahr nicht mit einem Wert versehen, so lässt sich der Bericht nicht öffnen (Fehlermeldung: Laufzeitfehler '3021': Kein aktueller Datensatz.).

Wie kann ich denn per VBA die Zuweisung -Me.lbl_Daten_5.ControlSource = [strSchj_5]- unterbinden oder das Textfeld im Bericht (hier "lbl_Daten_5") ausblenden, wenn für dieses Schuljahr gar kein Bescheid hinterlegt ist; aktuell habe ich die betreffenden Zeilen auskommentiert, was bedeutet, dass ich manuell die Code-Zeilen reaktiviere, wenn in dem betreffenden Schuljahr ein Bescheid elektronisch erfasst wurde.

Ich habe im Augenblick keine Idee!

Vielen Dank vorab!

Viele Grüße
gromax

MaggieMay

Hallo,

es wäre wohl am einfachsten, wenn du eine Beispiel-DB hochladen könntest, an der man sich das mal anschauen und auf deren Grundlage man dir eine Alternativlösung vorschlagen kann.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

danke für das Angebot.
Anbei habe ich die DB mit dem Bericht und der entsprechenden Abfrage angehängt.

Viele Grüße
gromax

MaggieMay

Hallo,
ich habe da erstmal noch eine Frage:
ZitatDie Spaltenköpfe im Bericht lasse ich per VBA erstellen:
'aktuelles Schuljahr
If Date < DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If

Was soll passieren, wenn der Bericht am 1. August angefordert wird? ;-)

Mein Vorschlag wäre, den Code folgendermaßen zu vereinfachen:
Private Sub Report_Open(Cancel As Integer)
    Dim i As Integer, j As Integer, Y As Integer
    Y = Year(Date)
    If Date < DateSerial(Y, 8, 1) Then
        j = -1
    Else
        j = 0
    End If
    For i = 0 To 9
        Me("lbl_Schj" & i).ControlSource = "=""" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & """"
        Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
        Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"
        Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"
    Next
End Sub

eine entsprechende vereinheitlichende Umbenennung der Steuerelemente vorausgesetzt.

Dann solltest du dafür sorgen, dass in der Kreuztabellenabfrage fixierte Spaltenüberschriften eingesetzt werden, der Code müsste also vor dem Aufruf des Berichts ebenfalls per VBA generiert werden.

BTW:
Die Kontaktdaten der Schulen solltest du nicht als Konstanten im Code definieren sondern in einer Tabelle bereitstellen.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

das mit dem 1. August habe ich kapiert! Klar, dass ich diesen Tag ausspare, geht natürlich nicht!

Deine Verkürzung ist genial und sehr professionell - vielen Dank.

Die Darstellung des Berichts funktioniert, wenn auch mit der Einschränkung, dass ich die Spaltenüberschrift fixieren muss. Das bedeutet in letzter Konsequenz, dass ich jedes Jahr "nachsteuern" und das jeweils aktuelle Schuljahr einpflegen muss.
Schön wäre es, wenn ich über eine Variable auf den SQL-Code zugreifen könnte:

Abfrage.SQL = "TRANSFORM Count(tbl_BEARBEITUNG_SCH_VER.UMS_FS) AS AnzahlvonUMS_FS" _
              & vbCrLf & "SELECT tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang" _
              & vbCrLf & "FROM tbl_UMSETZUNGEN INNER JOIN (tbl_SONDERPAEDAGOGIK INNER JOIN (tbl_SCHULARTEN INNER JOIN ((tbl_NATIONEN INNER JOIN tbl_SCHUELER ON tbl_NATIONEN.NAT_PS = tbl_SCHUELER.NAT_FS) INNER JOIN ((tbl_LANDKREISE INNER JOIN tbl_EINRICHTUNGEN ON tbl_LANDKREISE.LKR_PS = tbl_EINRICHTUNGEN.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER ON tbl_EINRICHTUNGEN.EIN_PS = tbl_BEARBEITUNG_SCH_VER.EIN_FS) ON tbl_SCHUELER.SuS_PS = tbl_BEARBEITUNG_SCH_VER.SuS_FS) ON tbl_SCHULARTEN.SCM_PS = tbl_EINRICHTUNGEN.SCM_FS) ON tbl_SONDERPAEDAGOGIK.SOP_PS = tbl_BEARBEITUNG_SCH_VER.SOP_FS) ON tbl_UMSETZUNGEN.UMS_PS = tbl_BEARBEITUNG_SCH_VER.UMS_FS" _
              & vbCrLf & "GROUP BY tbl_LANDKREISE.LKR_NameKurz, tbl_UMSETZUNGEN.UMS_Art_lang" _
              & vbCrLf & "PIVOT tbl_BEARBEITUNG_SCH_VER.BEA_SchjBeginn In (2006/07,2007/08,2008/09,2009/10,2010/11,2011/12,2012/13,2013/14,2014/15,2015/16);"


Im obigen Code lasse ich die fixierten Spaltenüberschriften beim Aufruf des Berichts in die Abfrage einlesen und das funktioniert. Gibt es denn eine Möglichkeit, diese Schuljahre über eine Variable einzulesen.
Ich habe dies schon mit meiner alten Konstruktion

lngY = Year(Date)

If Date < DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj0 = Right$(lngY, 4) & "/" & Right(lngY + 1, 2)
End If

If Date < DateSerial(lngY, 8, 1) Then
  strSchj1 = Right$(lngY - 2, 4) & "/" & Right$(lngY - 1, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj1 = Right$(lngY - 1, 4) & "/" & Right(lngY, 2)
End If

If Date < DateSerial(lngY, 8, 1) Then
  strSchj2 = Right$(lngY - 3, 4) & "/" & Right$(lngY - 2, 2)
  ElseIf Date > DateSerial(lngY, 8, 1) Then
  strSchj2 = Right$(lngY - 2, 4) & "/" & Right(lngY - 1, 2)
End If
...

versucht und bin mit den Variablen strSchj0...strSchj1...strSchj2... glatt gescheitert; habe dabei auch mit  [strSchj0]...[strSchj1]...[strSchj2]... oder [strSchj0] & "," & [strSchj1] & "," & [strSchj2] & "," & ... mehrere Schreibweisen ausprobiert, mal mit Klammer, mal ohne - aber immer Fehlanzeige.

Wenn dieses klappen würde, dann bräuchte ich nicht mehr jedes neue Schuljahr nacharbeiten und die letzten 10 Schuljahre würden immer abgebildet werden.

Könntest Du nochmal überlegen - bei mir klappt das nicht?

Vielen Dank
gromax

MaggieMay

#9
Hi,

du kannst doch die Jahreszahlen in einer Schleife als String generieren und diesen in den Abfrage-Code einbauen.

Beispiel:
Private Sub btn_OpenRepoert_Click()
    Dim strSQL A sString, strColumns As String
    Dim i, j, Y
    Y = Year(Date)
    If Date < DateSerial(Y, 8, 1) Then
        j = -1
    Else
        j = 0
    End If
    For i = 0 To 9
        strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
    Next
    StrSQL =  "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " & _
              "SELECT K.LKR_NameKurz, U.UMS_Art_lang " & _
              "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " & _
              "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " & _
              "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns,2) & ");"
    CurrentDB.QueryDefs("Abfrage").SQL = strSQL
    DoCmd.OpenReport "repname", acViewPreview
End Sub


Wenn du die Überschriften in umgekehrter Reihenfolge haben möchtest, musst du die Schleife halt anders herum laufen lassen:
    For i = 9 To 0 Step -1

PS:
Meiner Ansicht nach sollten die einzelnen  Spaltenüberschriften in Gänsefüßchen gesetzt werden. Ersatzweise sollte es wohl auch mit einfachen Hochkommata gehen.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

ich bekomme diese Codes nicht zusammen; ich verstehe gar nicht, wie ich diesen Code dazu bringen könnte, dass die Variable 'strColumns' in die Datenbank eingetragen wird.

Ich habe jetzt sehr viele Variationen nach 'Versuch und Irrtum' zusammen gefügt, in den meisten Fällen hängt der Code mit Gelb-Markierung bei der Zeile 'dbs.QueryDefs("qry_STATChronik").SQL = strSQL' und es wird ein Syntax-Fehler bei der TRANSFORM-Anweisung angezeigt.

Private Sub Report_Load()
Dim dbs As DAO.Database
Dim Query As DAO.QueryDef
Dim strSQL As String
Dim strColumns As String
Dim i As Integer
Dim j As Integer
Dim Y As Integer

Set dbs = CurrentDb
Set Query = dbs.QueryDefs("qry_STATChronik")

Y = Year(Date)

    If Date < DateSerial(Y, 8, 1) Then
        j = -1
    Else
        j = 0
    End If

strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " _
              & "SELECT K.LKR_NameKurz, U.UMS_Art_lang " _
              & "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " _
              & "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " _
              & "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"
             
dbs.QueryDefs("qry_STATChronik").SQL = strSQL 'Ziel-Abfrage zum Übertrag in den Bereich der "fixierten Spalten"

   
    For i = 0 To 9
     strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)

        Me("lbl_Schj" & i).ControlSource = "=""[strColumns]"""                                                            'Übertrag der Schuljahre in doe Spaltenüberschrift
        Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)                         'Übertrag Textfelder des Detailbereiches
        Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"   'Übertrag der Summenformel in den Gruppenfußbereich
        Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"    'Übertrag der Summenformel in den Berichtsbereich
    Next i

strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " _
              & "SELECT K.LKR_NameKurz, U.UMS_Art_lang " _
              & "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " _
              & "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " _
              & "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"

Query.SQL = strSQL 'Ziel-Abfrage zum Übertrag in den Bereich der "fixierten Spalten"

Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten 10 Schuljahren"

dbs.Close
Set dbs = Nothing
End Sub


Es ist ob der Vielfalt der Möglichkeit nahezu unerschöpflich; ich weiß auch nicht, an welcher Stelle ich mit dem Hochkomme arbeiten könnte bzw. wo ich die Anführungszeichen einpflegen soll.

Sorry - aber ich wäre für einen weiteren Impuls sehr dankbar.

Viele Grüße
gromax

MaggieMay

Na, den Code für die Abfrage an die der Bericht gebunden ist musst du natürlich vor dem Öffnen des Berichts aktualisieren - so wie ich es gezeigt hatte. Der Rest gehört dann ins Open-Ereignis des Berichts. Das Load-Ereignis ist ungeeignet, ich dachte der Punkt wäre inzwischen bereits geklärt.

Betrachte das ganze doch einfach mal chronologisch:
Zuerst muss die Abfrage angepasst werden, dann wird der Bericht geöffnet und beim Öffnen des Berichts müssen die Steuerelemente auf bereits bewährte Art besetzt werden.
Freundliche Grüße
MaggieMay

gromax

Hallo MaggieMay,

klasse - einfach klasse! Was bin ich froh, es klappt und vielen, vielen Dank!

Folgend notiere ich die beiden Prozeduren - es könnte ja sein, ein anderer Teilnehmer hat dieses Thema  auch verfolgt; die Urheberschaft liegt aber allein bei Dir!!

1. Der Aufruf der ersten Prozedur zur Übergabe der fixierten Spaltennamen an die Abfrage erfolgt über ein Formular mit einer Optionsgruppe (hier: Optionswert 3):

    If intEingabe = 3 Then

    Y = Year(Date)
    If Date < DateSerial(Y, 8, 1) Then
        j = -1
    Else
        j = 0
    End If
    For i = 0 To 9
        strColumns = strColumns & "," & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)
    Next
    strSQL = "TRANSFORM Count(B.UMS_FS) AS AnzahlvonUMS_FS " & _
              "SELECT K.LKR_NameKurz, U.UMS_Art_lang " & _
              "FROM tbl_UMSETZUNGEN AS U INNER JOIN (tbl_SONDERPAEDAGOGIK AS P INNER JOIN (tbl_SCHULARTEN AS A INNER JOIN ((tbl_NATIONEN AS N INNER JOIN tbl_SCHUELER AS S ON N.NAT_PS = S.NAT_FS) INNER JOIN ((tbl_LANDKREISE AS K INNER JOIN tbl_EINRICHTUNGEN AS E ON K.LKR_PS = E.LKR_FS) INNER JOIN tbl_BEARBEITUNG_SCH_VER AS B ON E.EIN_PS = B.EIN_FS) ON S.SuS_PS = B.SuS_FS) ON A.SCM_PS = E.SCM_FS) ON P.SOP_PS = B.SOP_FS) ON U.UMS_PS = B.UMS_FS " & _
              "GROUP BY K.LKR_NameKurz, U.UMS_Art_lang " & _
              "PIVOT B.BEA_SchjBeginn In (" & Mid(strColumns, 2) & ");"
    CurrentDb.QueryDefs("qry_STATChronik").SQL = strSQL
    DoCmd.OpenReport "rpt_STATChronik", acViewReport
    End If


Ich glaube, der Aufruf des Berichts muss mit dem Parameter 'acViewReport' erfolgen, sonst kann die nachfolgende Prozedur des Load-Ereignisses des Berichts nicht mehr mit den Inhalten in den Textfeldern (Bsp.: >>Me("lbl_Schj" & i).ControlSource = XXX<<) befüllt werden.

2. Nach dem Aufruf des Berichts mit >>DoCmd.OpenReport "rpt_STATChronik", acViewReport<< überträgt der Code die Inhalte in die Textfelder des Berichts:

Private Sub Report_Load()
Dim strSQL As String
Dim strColumns As String
Dim i As Integer
Dim j As Integer
Dim Y As Integer

Y = Year(Date)

    If Date < DateSerial(Y, 8, 1) Then
        j = -1
    Else
        j = 0
    End If

    For i = 0 To 9
        Me("lbl_Schj" & i).ControlSource = "=""" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & """"           'Übertrag in die Textfelder der Spaltenüberschrift
        Me("lbl_daten" & i).ControlSource = Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2)                         'Übertrag Textfelder des Detailbereiches
        Me("lbl_sumGruppe" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"   'Übertrag der Summenformel in den Gruppenfußbereich
        Me("lbl_sumTotal" & i).ControlSource = "=Sum([" & Right$(Y + j - i, 4) & "/" & Right$(Y + j + 1 - i, 2) & "])"    'Übertrag der Summenformel in den Berichtsbereich
    Next i

Me.Bezeichnungsfeld77 = p_cstrName2 & " - Bescheide in den letzten 10 Schuljahren"

End Sub


Auch wenn ich vermute, dass die Arbeit an einer DB nie fertig ist, bin ich jetzt ziemlich fertig!!

Vielen Dank nochmals und

alles Gute
gromax

MaggieMay

Hallo,
ZitatIch glaube, der Aufruf des Berichts muss mit dem Parameter 'acViewReport' erfolgen, sonst kann die nachfolgende Prozedur des Load-Ereignisses des Berichts nicht mehr mit den Inhalten in den Textfeldern [...] befüllt werden.
wie bereits mehrfach gesagt, verwende dafür besser das OPEN-Ereignis.
Freundliche Grüße
MaggieMay