PDA

Vollständige Version anzeigen : Abfrage mit Kalenderwoche


Ziepelmann
07.05.2004, 06:43
Hallo,
ich bin heute schon wieder mal auf die kompetente Hilfe des Forums angewiesen.
Ich habe in einem Formular ein Listenfeld das mir mehrere Spalten aus mehreren Tab anzeigt.
Das Filtern der Daten nach Datum ( von/bis ) funktioniert auch.
jetzt möchte ich aber alternativ nach der Kalenderwoche filtern und da stelle ich mich wieder etwas Begriffstutzig an . Doch seht mal selber:
Dim xdat1 As String
Dim xdat2 As String
Dim xdat3 As String

xdat1 = Format(Me.TB_VonDat, "mm\/dd\/yyyy")
xdat1 = "#" & xdat1 & "#"
xdat2 = Format(Me.TB_BisDat, "mm\/dd\/yyyy")
xdat2 = "#" & xdat2 & "#"
xdat3 = Format(Me.TB_KW, "ww\/yy")

' läd alle möglichen Rollen in das Listenfeld

SQL = "SELECT Produktion_Rollenübergang.Produkt_Rolle AS Rollennummer, Produktion_Rollenübergang.Produkt_Auftrag AS Auftragsnr, Produktion_Rollenübergang.Produkt_Artikel AS Artikelnr, Artikel_Stamm.Artikel_Def00 AS Dekor, Artikel_Stamm.Artikel_Def01 AS Dekorschlüssel, Def_Qualität.Qualität_Bez AS Qualität, Produktion_Rollenübergang.Produkt_Länge AS Rollenlänge, Produktion_Rollenübergang.Produkt_Psn AS Maschinenführer, Produktion_Rollenübergang.Produkt_Time AS Produktionszeit, IIf([Produktion_Rollenübergang].[Produkt_Halbzeug]=0,Mid([Produktion_Rollenübergang].[Produkt_Rolle],5,1)) AS Anlage, Produktion_Rollenübergang.Produkt_LGew AS Auftragsgew, Kunden_Stamm.K_Nam1 As Kunde, Format([Produktion_Rollenübergang].[Produkt_Time],'ww\/yy') AS KWoche "
SQL = SQL & "FROM ((Produktion_Rollenübergang INNER JOIN Artikel_Stamm ON Produktion_Rollenübergang.Produkt_Artikel = Artikel_Stamm.Artikel_Nr) INNER JOIN Def_Qualität ON Artikel_Stamm.Artikel_Def02 = Def_Qualität.Qualität_ID) INNER JOIN (Kunden_Stamm INNER JOIN Auftrag_Stamm ON Kunden_Stamm.K_ID = Auftrag_Stamm.K_ID) ON Produktion_Rollenübergang.Produkt_Auftrag = Auftrag_Stamm.Auf_Nr "
If OPG_KW = 1 Then
SQL = SQL & "WHERE ((Format([Produktion_Rollenübergang].[Produkt_Time], 'ww\/yy')) = " & xdat3 & ") "
Else
SQL = SQL & "WHERE ((Produktion_Rollenübergang.Produkt_Time) Between " & xdat1 & " And " & xdat2 & ") "

End If
SQL = SQL & "ORDER BY Produktion_Rollenübergang.Produkt_Rolle;"

LF_Rollenbericht.RowSource = SQL


Es geht hauptsächlich um die richtige Form der ersten Bedingung vor Else.

vielen Dank erst mal
Frank S.

piano
07.05.2004, 07:24
Hallo
, 'ww\/yy')) = '" & xdat3 & "') "
(xdat3 als Text!) sollte funktionieren

Ziepelmann
07.05.2004, 12:12
Hallo piano,

wie ich es auch anstelle nach der Eingabe im Formular wandelt Access die Eingabe (zBsp. 14/04) in ein Datum um und ich habe ein falsches Ergebnis.(um beim Bsp. zu bleiben von der 16.KW)

Grüße Frank S

Ziepelmann
07.05.2004, 14:18
Hallo,

kann mir vieleicht noch jemand weiter helfen?

Danke
Frank S

Mike
07.05.2004, 15:32
Vielleicht kommst du mit dieser Funktion weiter:

Function KWoche(varDatum As Variant) As Variant
' Beschreibung: Berechnung der DIN-Kalenderwoche
' Regel : 1. Montag ist erster Tag der Woche
' 2. Eine Woche zählt zu demjenigen Kalenderjahr, in dem mindestens vier Tage liegen.
On Error GoTo Proc_Err
If IsNull(varDatum) Or Not IsDate(varDatum) Then KWoche = Null: Exit Function
KWoche = Format(varDatum, "ww", vbMonday, vbFirstFourDays)

Proc_Exit:
Exit Function

Proc_Err:
MsgBox Err.Description & " in Function: KWoche"
Resume Proc_Exit
End Function
Mike

Ziepelmann
10.05.2004, 00:39
Hallo,
vielen Dank nochmal für die Hilfe.
Ich habe es jetzt so gelöst.
Die Formatierung von xdat3 im VBA muß weg und im Formular gebe ich das Eingabeformat vor (zBsp. 00\/00;0;_).
Da es ein Textfeld ist funktioniert das.
Ein kleines Problem gibt es aber noch - es funktioniert erst ab der 10. Woche da in der Abfrage das Format ww/yy nicht immer 2Stellige Wochen ausgibt.

Gruß Frank