Dag en maand keren om

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
419
Via een UPDATE-query voeg ik een datum in die in een tekst veld ingevoerd wordt. Bij nakijken in de tabel blijkt dat de dag en de maand telkens omgekeerd wordt, indien mogelijk (5-9-2017 wordt 9-5-2019, maar 30-9-2015 blijft 30-9-2015).
Voer ik echter de datum in via een formulier, worden de dag en de maand niet omgekeerd.

Voorbeeld dat werkt

Code:
Private Sub Form_Load()
    Dim sqlForm As String
    
    sqlForm = "SELECT tblDatumWerktOok.DDatum FROM tblDatumWerktOok;"
    
    With Me
        .RecordSource = sqlForm
        .txtDatum.Format = "Short Date"
    End With    
End Sub

--------------------------------------------------------------------------

Private Sub txtDatum_Exit(Cancel As Integer)
    Me.datDatum = Me.txtDatum
    Me.Requery
End Sub

Voorbeeld dat dag en maand omkeerd

Code:
Private Sub Form_Load()
    Dim sqlForm As String
    
    sqlForm = "SELECT tblDatumWerktOok.DDatum FROM tblDatumWerktOok;"
    
    With Me
        .RecordSource = sqlForm
        .txtDatum.Format = "Short Date"
    End With
    
End Sub

-------------------------------------------------------------------------------

Private Sub txtDatum_Exit(Cancel As Integer)
    DoCmd.RunSQL ("UPDATE tblDatumWerktOok SET DDatum = #" & Me.txtDatum & "#;")
    Me.Requery
End Sub

Dit begrijp ik niet :(. En hoe kan ik dit toch correct krijgen?
 
VBA werkt met de Amerikaanse datumnotatie. Met Cdbl(), CDate(), Format() heb je wat mogelijkheden om het correct te krijgen.
 
De verklaring van vea is correct; het probleem wordt veroorzaakt door de Amerikaanse datumnotatie. Je moet je datum dus omzetten naar een getal, en dat in je query terugzetten naar een datum. Ik zou dat dus zo doen:
Code:
Private Sub txtDatum_Exit(Cancel As Integer)
    CurrentDb.Execute ("UPDATE tblDatumWerktOok SET DDatum = CDate(" & Cdbl(Me.txtDatum.Value) & ")", dbFailOnError)
    Me.Requery
End Sub
 
Thanks! collega's. :D. Maar toch wel vreemd dat Microsoft in zijn helpdesk zelf zegt dat "Short Date" de systeemdatum genereert. Ergens in mijn ver verleden herinner ik me dat in FoxPro er slechts één functie was: "set date French". Maar ja dat is dan ook lang geleden!
 
“Short Date” genereert niks, dat is alleen maar een opmaak van een getal. Namelijk opmaken als korte datumnotatie. Verder niks. Een datum is namelijk niks anders als een getal, eventueel met een decimaal deel als je ook de tijd wilt. En dat getal wordt in verschillende landen anders opgemaakt. In Amerika dus als Maand-Dag-Jaar, en in Europa als Dag-Maand-Jaar. Daarom moet je dus altijd vanuit het getal werken, nooit vanuit de datum functie. D.w.z. als je een datum in een query wilt zetten.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan