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.
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.
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. 
Ich habe jetzt das Berichtsfeld „Plangebiet“ als Grundlage für den Filter genommen und siehe da -> *Applaus* 
Vielen vielen Dank Peter. War mittlerweile schon kurz vor dem Verzweifeln. 
Liebe Grüße
-Flo-