collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 76
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 2
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13976
  • stats Beiträge insgesamt: 66554
  • stats Themen insgesamt: 8972
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Dynamischen Bericht erstellen  (Gelesen 6467 mal)

Offline X-ess

  • Newbie
  • Beiträge: 6
Dynamischen Bericht erstellen
« am: September 25, 2017, 15:46:17 »
Hallo,

ich versuche einen dynamischen Bericht zu erstellen und mich dabei an dem Beispiel von rogersaccesslibrary zu orientieren (habe ich in einem anderen Thema hier im Forum gefunden).
http://www.rogersaccesslibrary.com/forum/topic362.html

Mein Problem in der Kurzfassung: In dem Bericht stehen die Jahre in den Spalten, diese sind abhängig vom aktuellen Jahr (aktuelles Jahr + letzte 4 Jahre). Der Bericht muss sich entsprechend anpassen. Die Daten kommen aus einer Kreuztabelle.
Das Beispiel von rogersaccesslibrary scheint sehr hilfreich zu sein, ich hänge nur schon ganz am Anfang:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim fld As DAO.Field

Set db = CurrentDb
Set qdf = db.QueryDefs("qryStatistikAkq_AnzJeMA_Kreuztabelle")
indexx = 0
    For Each fld In qdf.Fields
          'Tue etwas
    Next fld

Das Programm läuft gar nicht in die Schleife hinein und ich komme nicht drauf wieso nicht. Das Beispiel von rogersaccesslibrary läuft auch problemlos. Die "Microsoft DAO 3.6 Object Library" habe ich aktiviert, daran lag es auch nicht.

Woran könnte das liegen?

Wenn das gelöst ist mache ich weiter bis zum nächsten Problem  :D
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Dynamischen Bericht erstellen
« Antwort #1 am: September 25, 2017, 16:24:23 »
Läuft der Code denn überhaupt an? Setze einen Haltepunkt in der ersten Zeile. Ist auch eine Ereignisprozedur im Bericht zugewiesen? Siehe Eigenschaftsfenster.
Grüße von der (⌒▽⌒)
 

Offline X-ess

  • Newbie
  • Beiträge: 6
Re: Dynamischen Bericht erstellen
« Antwort #2 am: September 25, 2017, 16:34:33 »
Der Code läuft wunderbar, überspringt aber einfach diese Schleife. Dadurch bleibt die erstellte Abfrage ohne Inhalt.

Dem Bericht ist noch keine Ereignisprozedur zugewieden, da es vorab nur um die Erstellung der Abfrage geht, die dann als Grundlage für den Bericht dient.
Wie ich das ganze dann in den Bericht bekomme ist eine weitere Hürde.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23348
Re: Dynamischen Bericht erstellen
« Antwort #3 am: September 25, 2017, 17:20:12 »
Hallo,

gibt es die Abfrage qryStatistikAkq_AnzJeMA_Kreuztabelle  überhaupt?


Liefert diese Abfrage überhaupt DS, wenn sie direkt aufgerufen wird?

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1789
Re: Dynamischen Bericht erstellen
« Antwort #4 am: September 25, 2017, 17:29:17 »
Hallo Franz,
Hatte gerade eine ähnliche Antwort auf dem Schirm.
Zitat
Liefert diese Abfrage überhaupt DS, wenn sie direkt aufgerufen wird?
Ist, glaube ich hier nicht das Thema. Mein Vorschlag wäre gewesen
".Fields.Count" zu prüfen. Wobei ich nicht darüber nachgedacht habe,
ob das (= 0) bei einer vorhandenen Abfrage überhaupt möglich ist.
If qdf.Fields.Count > 0 Then
    'Schleife
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline X-ess

  • Newbie
  • Beiträge: 6
Re: Dynamischen Bericht erstellen
« Antwort #5 am: September 27, 2017, 08:12:35 »
Hallo an alle,

vielen Dank für die Hilfsbereitschaft. Um nicht länger im trüben zu raten habe ich meine Datenbank auf das Minimum beschränkt, um das Problem zu verdeutlichen.

Der alte Bericht (statisch) funktioniert einwandfrei. ABER: Wenn sich die anzuzeigenden Jahre verändern (Spalten), dann funktioniert der Bericht nicht mehr. (Es ist immer ein Mitarbeiter auszuwählen, sonst ist der Bericht leer)
Der neue Bericht soll die anzuzeigenden Spalten aus der Kreuztabelle entnehmen, daraus eine neue Abfrage basteln und diese in den Bericht einfügen (wie bei dem Beispiel, das ich oben verlinkt habe). Wie gesagt hängt es schon am Anfang und ich blicke nicht ganz durch.
Eigentlich wird das Makro beim Öffnen des Berichtes geöffnet, ich habe zum Testen einen Button gemacht.

Über Hilfe bin ich sehr dankbar.
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23348
Re: Dynamischen Bericht erstellen
« Antwort #6 am: September 27, 2017, 09:03:10 »
Hallo,

die Kreuztabelle beinhaltet keine fixierten Spaltenüberschriften, demzufolge gibt es zur Zeit der Code-Bearbeitung gar keine Felder.

Versorge  den SQL-String der Kreuztabellenabfrage per VBA mit den aktuellen Überschriften  und drucke damit direkt den Bericht.

Zitat
TRANSFORM Count(qryStatistikAkq_AnzJeMA.KW) AS AnzahlvonKW
SELECT qryStatistikAkq_AnzJeMA.KW
FROM qryJahrStatistik LEFT JOIN qryStatistikAkq_AnzJeMA ON qryJahrStatistik.JahrBezeichnung = qryStatistikAkq_AnzJeMA.Jahr
GROUP BY qryStatistikAkq_AnzJeMA.KW
ORDER BY qryJahrStatistik.JahrBezeichnung DESC
PIVOT qryJahrStatistik.JahrBezeichnung In ("2013","2014","2015","2016","2017");

Der weitere  damit zusammenhängende Code könnte entfallen.



@Beaker s.a.:

Zitat
Liefert diese Abfrage überhaupt DS, wenn sie direkt aufgerufen wird?

Ist, glaube ich hier nicht das Thema

sieht so aus, als wäre es doch ein Thema..   ;) :) :) :) 8)

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Dynamischen Bericht erstellen
« Antwort #7 am: September 27, 2017, 12:07:30 »
Du hast den Ablauf nicht verstanden. Setze Haltepunkte in Rogers Beispiel, blende das Lokalfenster ein und arbeite Schritt für Schritt die Anweisungen beobachtend ab.

Der Einsprungspunkt findet sich im beim Öffnen Ereignis des Berichts, damit das lokale Datenfeld (Array) ReportLabel die richtigen Überschriften erhält und die lokale Funktion FillLabel auch das Datenfeld mit den Überschriften findet.

Und die Dimensionierung des Datenfelds ReportLabel muss nicht größer als die Anzahl der gebundenen Steuerelemente im Bericht - 1 sein.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: X-ess

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1789
Re: Dynamischen Bericht erstellen
« Antwort #8 am: September 27, 2017, 13:08:27 »
Hallo Franz,
Zitat
sieht so aus, als wäre es doch ein Thema..
Warum schreibst du dann ?
Zitat
demzufolge gibt es zur Zeit der Code-Bearbeitung gar keine Felder.
Ich hatte aus dem Code entnommen, dass eine Fields-Auflistung
abgearbeitet werden soll. Und da interessiert mich erstmal nicht
ob DS vorhanden sind.

@x-ess
In ("2013","2014","2015","2016","2017")Die Liste zwischen den Klammern kannst du mit einer öffentlichen
Function auch variabel gestalten.
Prinzip (Luftcode):
Public Function JahresListe(RefJahr As Integer, Vorlauf As Integer, Nachlauf As integer) As String
   
    Dim z As Integer
    For z = RefJahr - Vorlauf To RefJahr + Nachlauf
        JahresListe = JahresListe & """" & z & ""","
    Next z
    'letztes Komma abschneiden
    JahresListe = Mid(JahresListe,1,Len(Jahresliste)-1)

End Function
In die Abfrage eingebaut
... IN (JahresListe(2017,2,3))ergibt das die Jahre 2015 - 2020

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Dynamischen Bericht erstellen
« Antwort #9 am: September 27, 2017, 14:16:02 »
@Ekkehard,

er will und braucht doch gar keine fixierten Spaltenüberschriften in der Kreuztabelle. Das Prinzip aus Rogers Beispiel funktioniert nun schon seit ca. 20 Jahren, wenn man es nur richtig anwendet. Zugegeben, man kann den Code noch etwas aufpolieren. Speziel für den Fall, wenn mehr Spalten in der Abfrage geliefert werden, als Steuerelemente vorhanden sind.
Grüße von der (⌒▽⌒)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1789
Re: Dynamischen Bericht erstellen
« Antwort #10 am: September 27, 2017, 15:58:23 »
Hallo Lachtaube,
Zitat
er will und braucht doch gar keine fixierten Spaltenüberschriften in der Kreuztabelle
Sag das Franz  ;).
Darüber ob fixierte Überschriften nötig sind habe ich mir keine Gedanken
gemacht. Das verlinkte Beispiel habe ich mir nicht angeschaut.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Dynamischen Bericht erstellen
« Antwort #11 am: September 27, 2017, 16:02:49 »
Dann sage ich es hiermit Franz. :)
Grüße von der (⌒▽⌒)
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23348
Re: Dynamischen Bericht erstellen
« Antwort #12 am: September 27, 2017, 16:56:22 »
Hallo,
na, dann sag ich Euch was   ;) :D ;D


Meine Ausführungen haben sich auf den betreffenden Codeteil in der geposteten  Beispiel-Db bezogen.  Dort wird die Field-Auflistung nur durchlaufen, wenn es fixierte Spaltenüberschriften in der Kreuztabellenabfrage gibt.  Weitere Untersuchen, speziell des "Roger"-Beispiels (was ich nicht kenne), hab ich nicht angestellt.  :P


Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1246
Re: Dynamischen Bericht erstellen
« Antwort #13 am: September 27, 2017, 17:17:36 »
Franz, so könnte man glauben - so ist es aber nicht. Die Access-/Jet-Engine stellt trotzdem im Querydef die Namen zur Verfügung (was dabei im Hintergrund geschieht,  ist wohl undokumentiert, aber bestimmt keine Magie).
Grüße von der (⌒▽⌒)
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23348
Re: Dynamischen Bericht erstellen
« Antwort #14 am: September 28, 2017, 08:34:01 »
Hallo ,

nun, mein durchgeführter Test hat eben dies gezeigt, dass (in der besagten DB beim entspr. Code-Fragment)  die .Fields -Auflistung/Eigenschaft nur dann existiert, wenn die mit set x = db.Querydefs.....  angesprochene Kreuztabellenabfrage definitiv fixierte Überschriften besitzt, ansonsten nicht.   Ich stelle mir das so vor, als dass die KT-Abfrage durch die Objektreferenzierung nicht ausgeführt wird und somit keine dynamischen Überschriften (Felder) erzeugt.  Vielleicht wird ja in den funktionieren "Roger"-Codes nicht eine KT-Abfrage als solche, sondern eine temporäre Ergebnis-Tabelle referenziert oder aber die KT-Abfrage in irgendeiner Weise vorab ausgeführt.

Magie ist es sicher nicht,  aber man weiß ja nie, was MS bei den einzelnen A-Versionen im Hintergrund alles anstellt. Will sagen: Vielleicht hängt das Ganz ja auch von der verwendeten A-Version ab.   (bei mir A2010)


Ich bin aber natürlich offen für einen gegenteiliges Beispiel    8) :)


PS:

 Statt set querydefs könnte auch ein Recordset mit der KT-Abfrage (ohne fixierte Spalten)  geöffnet werden und dessen Felder durchlaufen werden.  Vermutlich wird das funktionieren, weil eben der Recordset ein Ausführen der SQL erfordert.