Dynamischer Bericht

Hi ich bastel grad für meine Cheffin an einem GUI für die Erstellung eines Berichts.

Ich habe eine Abfrage mit folgendem Code erstellt (gekürzt):

SELECT Fälle.Plangebiet, Maßnahmen.Maßnahme, Count(Maßnahmen.Maßnahme) AS AnzahlvonMaßnahme, Fälle.[Eingestellt?]

FROM Fälle INNER JOIN Maßnahmen ON Fälle.Aktenindex = Maßnahmen.Aktenindex

WHERE (((Maßnahmen.[Antrag vom]) Between [Formulare]![Stat1]![Anfdatum] And [Formulare]![Stat1]![EndDatum])) OR (((Maßnahmen.[Erledigt am]) Between [Formulare]![Stat1]![Anfdatum] And [Formulare]![Stat1]![EndDatum]))

GROUP BY Fälle.Plangebiet, Maßnahmen.Maßnahme, Fälle.[Eingestellt?]

HAVING (((Fälle.Plangebiet) Like [Formulare]![Stat1]![PGebiet1] Or
 (Fälle.Plangebiet) Like [Formulare]![Stat1]![PGebiet2] Or
 (Fälle.Plangebiet) Like [Formulare]![Stat1]![PGebiet3] Or
.
.
.
 (Fälle.Plangebiet) Like [Formulare]![Stat1]![PGebiet19]))

ORDER BY Fälle.Plangebiet;

Im Formular Stat1 befinden sich Checkboxen, über die man auswählen kann, für welche Plangebiete die Statistik erstellt werden sollen (gekürzt):

Private Sub Weiter\_Click()

 If (Kontroll\_20 = -1) Then

 a = MsgBox("Alle Plangebiete gewählt.", vbOKOnly + vbInformation)

 PGebiet1 = 108
 PGebiet2 = 112
 PGebiet3 = 115
 .
 .
 .
 PGebiet19 = 419


 DoCmd.OpenReport "Maßnahmen nach Plangebiet", acPreview


 Else

 If (Kontroll\_1 + Kontroll\_2 + Kontroll\_3 + Kontroll\_4 + Kontroll\_5 + Kontroll\_6 + Kontroll\_7 + Kontroll\_8 + Kontroll\_9 + Kontroll\_10 + Kontroll\_11 + Kontroll\_12 + Kontroll\_13 + Kontroll\_14 + Kontroll\_15 + Kontroll\_16 + Kontroll\_17 + Kontroll\_18 + Kontroll\_19 + Kontroll\_20 = 0) Then
 a = MsgBox("Nichts gewählt.", vbOKOnly + vbExclamation)
 Else

 If (Kontroll\_1 = -1) Then
 PGebiet1 = 108
 Else
 PGebiet1 = Null
 End If

 If (Kontroll\_2 = -1) Then
 PGebiet2 = 112
 Else
 PGebiet2 = Null
 End If

 If (Kontroll\_3 = -1) Then
 PGebiet3 = 115
 Else
 PGebiet3 = Null
 End If
 .
 .
 .
 If (Kontroll\_19 = -1) Then
 PGebiet19 = 419
 Else
 PGebiet19 = Null
 End If

 DoCmd.OpenReport "Maßnahmen nach Plangebiet", acPreview

 End If
 End If

End Sub

Öffne ich den Bericht manuell, so funktioniert alles, wie es soll. Versuche ich es jedoch über das Formular, so erhalte ich einen leeren Bericht.

Vielen Dank für eure Hilfe.

Hallo,

kann es sein, das die CheckBoxen keinen Standartwert gsetzt haben und dann u.U. fuer die Abfrage Null liefern?

Um den Fehler einzugrenzen wuerde ich vorschlagen, das ganze nicht in einer kompletten Abfrage zu codieren.
Folgende Vorgehensweise:
1.Die Abfrage erstellen, aber ohne die Bedingungen mit den Checkboxes aber mit Gruppierung und SortOrder
2.Die Bedingung in einem String zusammensetzen analog der unten aufgefuehrten

etwa so :
sqlWhereClause = sqlWhereClause & " [Fälle.Plangebiet] like " & PGebiet1
sqlWhereClause = sqlWhereClause & " OR " & PGebiet2 …

3.Den Report aufrufen und die Bedingung beim Aufruf uebergeben.

DoCmd.OpenReport „MyReport“, acPreview, , strWhereClause

Das sieht zwar auf den ersten Blick etwas kompilierter aus, ist aber erstens flexibler ( Report kann auch aus einem anderen Formular aufgerufen werden) und zweitens kann man das dann debuggen und die Bedingung zur Laufzeit kontrollieren

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

kann es sein, das die CheckBoxen keinen Standartwert gsetzt
haben und dann u.U. fuer die Abfrage Null liefern?

Die Checkboxen haben den Standardwert 0. Ich hatte auch bereits eine MsgBox eingebaut, um zu überprüfen, ob die Werte überhaupt übergeben werden. Und merkwürdigerweise standen in der MsgBox die richtigen Werte. Der Bericht war dennoch leer.

Um den Fehler einzugrenzen wuerde ich vorschlagen, das ganze
nicht in einer kompletten Abfrage zu codieren.
Folgende Vorgehensweise:
1.Die Abfrage erstellen, aber ohne die Bedingungen mit den
Checkboxes aber mit Gruppierung und SortOrder
2.Die Bedingung in einem String zusammensetzen analog der
unten aufgefuehrten

etwa so :
sqlWhereClause = sqlWhereClause & " [Fälle.Plangebiet] like "
& PGebiet1
sqlWhereClause = sqlWhereClause & " OR " & PGebiet2 …

3.Den Report aufrufen und die Bedingung beim Aufruf
uebergeben.

DoCmd.OpenReport „MyReport“, acPreview, , strWhereClause

Das sieht zwar auf den ersten Blick etwas kompilierter aus,
ist aber erstens flexibler ( Report kann auch aus einem
anderen Formular aufgerufen werden) und zweitens kann man das
dann debuggen und die Bedingung zur Laufzeit kontrollieren

Tschau
Peter

Wenn ich das richtig verstehe soll ich also lieber mit ner WhereCondition beim öffnen des Berichts arbeiten?! Wenn ja, dann hast du in deiner Beschreibung einen syntaktischen Fehler. Hab aber verstanden, was du meinst. :smile: Ich versuch einfach mal mein Glück. Vielen Dank

Wenn ich das richtig verstehe soll ich also lieber mit ner
WhereCondition beim öffnen des Berichts arbeiten?! Wenn ja,
dann hast du in deiner Beschreibung einen syntaktischen
Fehler. Hab aber verstanden, was du meinst. :smile: Ich versuch
einfach mal mein Glück. Vielen Dank

Also ich hab das ganze jetzt mal mit einem WhereCondition-Konstrukt probiert. Jetzt erhalte ich zwar keinen leeren Bericht mehr, allerdings werden die ausgewählten Plangebiete jetzt gar nicht gefiltert.

Langsam bin ich etwas ratlos :x

Das merkwürdige an der Sache ist, wenn ich nach Klick auf den Button den Bericht in der Entwurfsansicht betrachte und die Berichtseigenschaften aufrufe, dann steht bei Filter z.b. sogar:

„([Fälle.Plangebiet] LIKE Null OR Null OR Null OR Null OR Null OR Null OR Null OR Null OR Null OR 302 OR Null OR Null OR Null OR Null OR 403 OR 404 OR Null OR Null OR Null)“

Dennoch werden alle Plangebiete gelistet.

Hi,

konnte erst jetzt mal wieder reinschauen, da ich meine Maus begraben musste, und erst heute ne neue besorgen konnte.

Ein Frage noch zu der Tabelle : das Feld Plangebiet ist von welchem Datentyp? Nummerisch oder Text?
Stimmt alles mit den Klammern und der Syntax in der WHERE-Bedingung?
„… plangebiet = " & p1 & " OR plangebiet = " & p2 " OR …“
Sind die Variablen auch wirklich richtig zugewiesen im Moment des Aufrufs? ( Mal Brechpunkt setzten und nachschauen)

Auch mal einen Breakpoint im „Beim Formatieren“ des Detailbereichs setzten und beim Breicht unter „RecordSource“ nachschauen wies dort ausschaut.

Mal nur mit einer Bedingung versuchen und dann nach und nach die Bedingungen erweitern.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

konnte erst jetzt mal wieder reinschauen, da ich meine Maus
begraben musste, und erst heute ne neue besorgen konnte.

Ein Frage noch zu der Tabelle : das Feld Plangebiet ist von
welchem Datentyp? Nummerisch oder Text?
Stimmt alles mit den Klammern und der Syntax in der
WHERE-Bedingung?
„… plangebiet = " & p1 & " OR plangebiet = " & p2 " OR …“
Sind die Variablen auch wirklich richtig zugewiesen im Moment
des Aufrufs? ( Mal Brechpunkt setzten und nachschauen)

Auch mal einen Breakpoint im „Beim Formatieren“ des
Detailbereichs setzten und beim Breicht unter „RecordSource“
nachschauen wies dort ausschaut.

Mal nur mit einer Bedingung versuchen und dann nach und nach
die Bedingungen erweitern.

Tschau
Peter

Leider kann ich heute nicht so viel an der DB arbeiten, da das Archiv schon sehnsüchtig auf mich gewartet hat. Aber ich kann schon mal soviel sagen, dass das Feld Plangebiet vom Typ Text ist.

Hallo,

ja dann muss in der Bedingung auch ein ’ vor jeden Wert.

…pGebiet = ‚" & Wert1 & "‘ OR …"

Tschau

Leider kann ich heute nicht so viel an der DB arbeiten, da das
Archiv schon sehnsüchtig auf mich gewartet hat. Aber ich kann
schon mal soviel sagen, dass das Feld Plangebiet vom Typ Text
ist.

Hallo,

ja dann muss in der Bedingung auch ein ’ vor jeden Wert.

…pGebiet = ‚" & Wert1 & "‘ OR …"

Tschau

Hi

nochmal vielen Dank für deine Hilfe. Ich habe es jetzt zum Laufen bekommen. Das Problem war allerdings ein anderes. Ich hatte in der WhereCondition das Tabellenfeld „Fälle.Plangebiet“ angesprochen, was natürlich kompletter Blödsinn ist. :wink:
Ich habe jetzt das Berichtsfeld „Plangebiet“ als Grundlage für den Filter genommen und siehe da -> *Applaus* :stuck_out_tongue:

Vielen vielen Dank Peter. War mittlerweile schon kurz vor dem Verzweifeln. :smile:

Liebe Grüße

-Flo-