Hallo Access_Profis,
ich habe zwei Datenbanken zur Schulverwaltung erstellt, die in Abhängigkeit vom jeweiligen Schuljahr (aktuelles Schuljahr-folgende Schuljahr-übernächstes Schuljahr) verschiedene Berichte anzeigen.
Nach dem Jahreswechsel funktioniert mein Code nun überhaupt nicht mehr, es wird gar kein Bericht mehr angezeigt und dieses auch gleich in beiden DBen nicht mehr.
Hier mein Code, der von einem Formular aus aufgerufen wird:
Private Sub opt_aktuell_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReportAufruf (1)
End Sub
Private Sub opt_folge_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReportAufruf (2)
End Sub
Private Sub opt_naechstfolgend_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReportAufruf (3)
End Sub
Sub ReportAufruf(intEingabe As Integer)
Dim strFilter As String
Dim lngY As Long
lngY = CLng(Year(Date))
If intEingabe = 1 And Date < DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY - 1, 4) & "/" & Right$(lngY, 2)
ElseIf intEingabe = 1 And Date > DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY, 4) & "/" & Right$(lngY + 1, 2)
DoCmd.OpenReport "rpt_WIEDERVORLAGE", acViewReport, , "Schuljahr1= " & "'" & strFilter & "'"
End If
If intEingabe = 2 And Date < DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY, 4) & "/" & Right$(lngY + 1, 2)
ElseIf intEingabe = 2 And Date > DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY + 1, 4) & "/" & Right$(lngY + 2, 2)
DoCmd.OpenReport "rpt_WIEDERVORLAGE_F", acViewReport, , "Schuljahr1= " & "'" & strFilter & "'"
End If
If intEingabe = 3 And Date < DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY + 1, 4) & "/" & Right$(lngY + 2, 2)
ElseIf intEingabe = 3 And Date > DateSerial(lngY, 8, 1) Then
strFilter = Right$(lngY + 2, 4) & "/" & Right$(lngY + 3, 2)
DoCmd.OpenReport "rpt_WIEDERVORLAGE_FF", acViewReport, , "Schuljahr1= " & "'" & strFilter & "'"
End If
End Sub
Ist am Code etwas falsch?
Liegt das etwa da dran, dass der Filter (Eigenschaftenblatt-Daten-Filter) nach wie vor korrekt eingetragen ist und der Code den dort hinterlegten String nicht überschreiben kann?
Wenn ja, wie lösche ich diesen Filter, damit in Abhängigkeit des aktuellen Datums der korrekte Filter wieder dort eingetragen werden kann?
Für eine Hilfe wäre ich dankbar.
Einen guten Start ins Neue Jahr
gromax
Hallo,
falsch ist die Vergewaltigung der Long-Datentypen....
Vermutlich gibt es aber keine Datensätze, die in Schuljahr1 den Text
2014/15
(oder "größer" ) enthalten...
Zur Berechnung des Filterstrings wäre dies empfohlen:
strFilter = Format(lngY - 1,"0000\/") & Format(lngY-2000, "00")
Zudem ist der Einsatz des MouseDown-Ereignisses fragwürdig...
Hallo DF6GL,
danke für die schnelle Antwort.
Hast Du mich nicht gemahnt, dass ich stringenter bei der Dimensionierung der Datentypen sein soll?
Meine, nach Deiner Mahnung schlampige Festlegung der Variablen lautete:
Dim strFilter As String
Dim Y As String
Dim rptAktuell As Report_rpt_WIEDERVORLAGE
Y = Year(Date)
If intEingabe = 1 And Date < DateSerial(Y, 8, 1) Then
strFilter = Right$(Y - 1, 4) & "/" & Right$(Y, 2)
ElseIf intEingabe = 1 And Date > DateSerial(Y, 8, 1) Then
strFilter = Right$(Y, 4) & "/" & Right$(Y + 1, 2)
DoCmd.OpenReport "rpt_WIEDERVORLAGE", acViewReport, , "Schuljahr1= " & "'" & strFilter & "'"
End If
und hat eigentlich funktioniert.
Dass wirklich Daten für das aktuelle Schuljahr 2014/15 vorhanden sind, konnte ich im alten Jahr - also vor Silvester - beim Aufruf des Berichts unter der Bedingung
...
ElseIf intEingabe = 1 And Date > DateSerial(lngY, 8, 1) Then
strFilter = CStr(Right$(lngY, 4) & "/" & Right$(lngY + 1, 2))
DoCmd.OpenReport "rpt_WIEDERVORLAGE", acViewReport, , "Schuljahr1= " & "'" & strFilter & "'"
...
verifizieren.
Deshalb bin ich ja so überrascht!
Bei der jetzt geltenden Bedingung
...
If intEingabe = 1 And Date < DateSerial(lngY, 8, 1) Then
strFilter = CStr(Right$(lngY - 1, 4) & "/" & Right$(lngY, 2))
...
macht der Bericht keinen Zucker?
Was kann da denn los sein?
Viele Grüße
gromax
Hallo,
Das
Dim Y As String
Y = Year(Date)
ist ja nun ganz falsch, wenn man zudem mit Y später weiter "rechnen" wollte...
Dim lngY As Long
lngY = CLng(Year(Date))
ist schon eher ok, gleichwohl die CLng()-Funktion hier schlicht überflüssig ist. Die Year()-Funktion liefert schon einen Long (Integer)- Wert.
setz mal einen Haltepunkt an den Anfang des Code und prüf den Inhalt von strFilter, ob der den Erwartungen entspricht.
Ansonsten kannst Du ja tatsächlich versuchen, im Berichtsentwurf die Filter-Eigenschaft zu leeren.
Hallo
ggf liegt es daran das für die bedingung des neuen Jahres (If intEingabe = 1 And Date < DateSerial(Y, 8, 1) Then) kein DoCmd.OpenReport ausgeführt wird wie im elseif - Teil
Hallo DF6GL,
Hallo DF6GL,
hallo daolix,
es ist tatsächlich so, wie daolix vermutet hat; da ich in allen beiden DBen die gleichen Code-Zeilen verwendet habe, erklärt sich auch das Verhalten der Berichte: Sie wurden einfach nicht aufgerufen!!
Vielen Dank euch beiden - wie immer ist dieses Forum eine große Hilfe.
Macht's gut!
gromax