Access DB - Abfrage des ersten Tags der Woche aus eigener Tabelle

LukS

Commodore
Registriert
Dez. 2009
Beiträge
4.945
Hallo,

ich hab hier eine, von wem auch immer erstellte, uralte Access DB, welche wir in unserer Abteilung zur Wochenplanung verwenden.
Die DB gibt es sicher schon seit über 20 Jahren. Mein Chef ist seit 19 Jahren in der Firma und hat die DB schon von seinem Vorgänger übernommen.

Tabelle T_Kalender:
1549871375666.png


Folgende Abfrage sollte den ersten Tag der Woche liefern. Funktioniert soweit gut, nur nicht für die Kalenderwoche 9, da wird ein falsches Datum geliefert:
Code:
SELECT T_Kalender.Jahr_KW, First(T_Kalender.Datum) AS ErsterWertvonDatum
FROM T_Kalender
GROUP BY T_Kalender.Jahr_KW;

Ergebnis der Abfrage:
1549871496752.png

Wie man sieht passt das Anfangsdatum der KW09 nicht. Was läuft da schief? Übersehe ich was oder ist die Abfrage mist?

Ich hab die DB jetzt seit ca. sieben Jahren in Verwendung und mir ist so ein Fehler nie untergekommen. 🤔
Könnt ihr mir einen Tipp geben?

Beste Grüße,
LukS
 
Warum nicht nach Mo (als erster Wochentag in D) filtern?
Code:
SELECT T_Kalender.Jahr_KW, T_Kalender.Datum AS ErsterWertvonDatum
FROM T_Kalender
WHERE T_Kalender.WoTag = "Mo"
GROUP BY T_Kalender.Jahr_KW;
Ansonsten liegt es bestimmt an der Sortierung bei
Code:
SELECT T_Kalender.Jahr_KW, First(T_Kalender.Datum) AS ErsterWertvonDatum
FROM T_Kalender
Es liefert ja nur den ersten Wert zurück. Testhalber kannst du das First() mal weglassen und schauen, wie Access sortiert...
 
  • Gefällt mir
Reaktionen: LukS
@bieneneber @Piktogramm
Erstmal Danke euch beiden.

Geht es in diesem Fall nicht auch viel einfacher:
Code:
SELECT Jahr_KW, Datum AS ErsterWertvonDatum
FROM T_Kalender
WHERE WoTag = "Mo"
Das sollte mir doch den gewünschten Wert aus der Tabelle Jahr_KW liefern, ohne das ich sortieren oder sonstwas muss. 🤔
Die Abfrage scheint zu funktioniert. Nur habe ich gerade herausgefunden, dass diese Abfrage nicht für das Anzeigen des ersten Tags der Woche benutzt wird. :confused_alt:

Der Erste Tag der Woche wird scheinbar in einem VB-Script festgelegt und dort scheint es zu hapern:
Code:
Option Compare Database

Function Woche_aus_Datum(Datum As Date, Plus As Integer) As String
Dim DatumStr As String, Zwi As String
Datum = Datum + Plus
DatumStr = "#" & Mid(Datum, 4, 2) & "/" & Left(Datum, 2) & "/" & Right(Datum, 4) & "#"
Woche_aus_Datum = DLookup("[Jahr_KW]", "T_Kalender", "[Datum] =" & DatumStr)
End Function
Sub Control_Akt_Woche()
'MsgBox (DateValue(Now()))
'MsgBox (Woche_aus_Datum(DateValue(Now()), 0)) 'TestInfo
Application.Forms("F_Woche").Controls("E_Jahr_KW").Value = Woche_aus_Datum(DateValue(Now()), 0)
Mo_Datum
End Sub
Sub Control_Woche()
'Application.Forms("F_Woche").Controls("E_Jahr_KW").Value = Woche_aus_Datum(Application.Forms("F_Woche").Controls("E_Mo_Datum").Value, 0)
Mo_Datum
End Sub
Sub Control_Woche_Plus()
Application.Forms("F_Woche").Controls("E_Jahr_KW").Value = Woche_aus_Datum(Application.Forms("F_Woche").Controls("E_Mo_Datum").Value, 7)
Mo_Datum
End Sub
Sub Control_Woche_Minus()
Application.Forms("F_Woche").Controls("E_Jahr_KW").Value = Woche_aus_Datum(Application.Forms("F_Woche").Controls("E_Mo_Datum").Value, -7)
Mo_Datum
End Sub
Sub Mo_Datum()
Application.Forms("F_Woche").Controls("E_Mo_Datum").Value = DLookup("[Datum]", "T_Kalender", "[Jahr_KW] =" & """" & Trim(Application.Forms("F_Woche").Controls("E_Jahr_KW").Value) & """")
Application.Forms("F_Woche").Refresh
Tage_färben
End Sub
Sub Tage_färben()
If Feiertag(DateValue(Forms("F_Woche").Controls("E_Mo_Datum"))) Then Do_Tage_färben "Mo", 13158600 Else Do_Tage_färben "Mo", -2147483643
If Feiertag(DateValue(Forms("F_Woche").Controls("E_Di_Datum"))) Then Do_Tage_färben "Di", 13158600 Else Do_Tage_färben "Di", -2147483643
If Feiertag(DateValue(Forms("F_Woche").Controls("E_Mi_Datum"))) Then Do_Tage_färben "Mi", 13158600 Else Do_Tage_färben "Mi", -2147483643
If Feiertag(DateValue(Forms("F_Woche").Controls("E_Do_Datum"))) Then Do_Tage_färben "Do", 13158600 Else Do_Tage_färben "Do", -2147483643
If Feiertag(DateValue(Forms("F_Woche").Controls("E_Fr_Datum"))) Then Do_Tage_färben "Fr", 13158600 Else Do_Tage_färben "Fr", -2147483643
Do_Tage_färben "Sa", 13158600
Do_Tage_färben "So", 13158600
End Sub
Sub Do_Tage_färben(E_Name As String, FarbWert As Long)
Forms("F_Woche").Controls("E_WochenDaten1").Controls(E_Name).BackColor = FarbWert
Forms("F_Woche").Controls("E_WochenDaten1").Controls(E_Name).FormatConditions(0).BackColor = FarbWert
If E_Name <> "Sa" And E_Name <> "So" Then Forms("F_Woche").Controls("E_WochenDaten1").Controls(E_Name).FormatConditions(2).BackColor = 13158600
End Sub
Function Feiertag(Datum As Date) As Boolean
Dim DatumStr As String
DatumStr = "#" & Mid(Datum, 4, 2) & "/" & Left(Datum, 2) & "/" & Right(Datum, 4) & "#"
If DLookup("[Datum]", "T_Feiertage", "[Datum] =" & DatumStr) = Datum Then Feiertag = True Else Feiertag = False
End Function
Sub ZeigNotiz()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.Close acForm, "F_Notiz"
Dim S_1 As String, S_2 As String
S_1 = Screen.ActiveControl.Name + "Notiz"
S_2 = "Tagesnotiz - " + Forms("F_Woche").Controls("E_WochenDaten1").Controls("Name").Value + " - " + Screen.ActiveControl.Name
DoCmd.OpenForm ("F_Notiz")
Forms("F_Notiz").Caption = S_2
Forms("F_Notiz").Controls("Notiz").ControlSource = S_1
End Sub
Function Funk1() As Boolean
Funk1 = True
End Function
Sub WochenAbfrage()
DoCmd.SetWarnings False
DoCmd.OpenQuery "A_WoAbfr_lö"
DoCmd.OpenQuery "A_WoAbfr1"
DoCmd.OpenQuery "A_WoAbfr2"
DoCmd.SetWarnings True
DoCmd.OpenReport "B_EMB_Wochenliste", acViewPreview
End Sub
Der Fehler liegt wohl irgendwo bei der Zeile 27 bis 31.
Ich schätze mal hier bei der Zeile 28 ist ein Fehler:
Application.Forms("F_Woche").Controls("E_Mo_Datum").Value = DLookup("[Datum]", "T_Kalender", "[Jahr_KW] =" & """" & Trim(Application.Forms("F_Woche").Controls("E_Jahr_KW").Value) & """")
Nur hab ich noch nicht ganz durchblickt wo das Problem ist. 🤔
In Visual Basic hab ich noch nie was geschrieben.
 
Zurück
Oben