kimidk1 Novice
12. juli 2020 - 20:48 Der er 9 kommentarer og
2 løsninger

Returnering af forkert dato i Access

Hej

Prøver at sætte mig ind i hvordan programmering i Access fungerer så jeg  har købt en bog :-)

sidder med et eksempel hvor jeg får en forkert dato ud fra en programstump:

Sub WhatTypeOfDay()

Dim response As String
Dim question As String
Dim strMsg1 As String, strMsg2 As String
Dim myDate As Date

question = "Enter any date in the format mm/dd/yyyy:" _
& Chr(13) & " (e.g., 07/06/2015)"
strMsg1 = "weekday"
strMsg2 = "weekend"
response = InputBox(question)

myDate = Weekday(CDate(response))

MsgBox myDate

If myDate >= 2 And myDate <= 6 Then
MsgBox strMsg1
Else
MsgBox strMsg2
End If

End Sub

Jeg har indtastet dato som US format 07/12/2020 (søndag den 12 juli 2020)
men får værdien 01-01-1900 fra linien MsgBox myDate

Har prøvet at indtaste dato som 12/07/2020 og 12-07-2020 men får så returneret datoen 31-12-1899

Kan ikke gennemskue hvor det går galt - mine windows indstillinger er sat til Nuværende format: Dansk (Danmark)

hilsen
Kimidk1
bsn Seniormester
13. juli 2020 - 01:55 #1
Datoer i Access er et helvede...
Det vil du opdage, når du kommer der henad...

Nedenstående sub rettet til...

Sub WhatTypeOfDay()

Dim response As Date
Dim question As String
Dim strMsg1, strMsg2 As String
Dim myDay As Long

question = "Enter any date in the format mm/dd/yyyy:" & Chr(13) & " (e.g., 07/06/2015)"
strMsg1 = "weekday"
strMsg2 = "weekend"
response = InputBox(question)

myDay = Weekday(response, vbMonday)
MsgBox myDay

If myDay >= 1 And myDay <= 5 Then
MsgBox strMsg1
Else
MsgBox strMsg2
End If

End Sub
kimidk1 Novice
13. juli 2020 - 14:38 #2
Ændringerne giver desværre ikke et ændret resultat - får stadigvæk de datoer som nævnt ovenfor, fra linien "MsgBox MyDay" :

"Jeg har indtastet dato som US format 07/12/2020 (søndag den 12 juli 2020)
men får værdien 01-01-1900 fra linien MsgBox myDate

Har prøvet at indtaste dato som 12/07/2020 og 12-07-2020 men får så returneret datoen 31-12-1899"
tjp Mester
13. juli 2020 - 15:52 #3
Prøv at dele 'myDate = Weekday(CDate(response))' op i 2:

Sub WhatTypeOfDay()

    Dim response As String
    Dim question As String
    Dim strMsg1 As String, strMsg2 As String
    Dim myDate As Date
    Dim DayOfWeek As Integer
   
    question = "Enter any date in the format mm/dd/yyyy:" _
            & Chr(13) & " (e.g., 07/06/2015)"
    strMsg1 = "weekday"
    strMsg2 = "weekend"
    response = InputBox(question, , "29/06/2015")
   
    myDate = CDate(response)
    DayOfWeek = Weekday(myDate)
   
    'MsgBox myDate
   
    If DayOfWeek >= 2 And DayOfWeek <= 6 Then
        MsgBox strMsg1
    Else
        MsgBox strMsg2
    End If

End Sub
store-morten Ekspert
13. juli 2020 - 16:22 #4
Prøv:
Sub WhatTypeOfDay()

Dim response As String
Dim question As String
Dim strMsg1 As String, strMsg2 As String
Dim myDate As Date

question = "Enter any date in the format mm/dd/yyyy:" _
& Chr(13) & " (e.g., 07/06/2015)"
strMsg1 = "weekday"
strMsg2 = "weekend"
response = InputBox(question)

myDate = CDate(response)

MsgBox myDate

If Weekday(myDate, vbMonday) < 6 Then
MsgBox strMsg1
Else
MsgBox strMsg2
End If

End Sub
tjp Mester
14. juli 2020 - 02:56 #5
Nedenfor svar på, hvorfor du får hhv '01-01-1900' og '31-12-1899' fra:

(...)
myDate = Weekday(CDate(response))
MsgBox myDate
(...)

Weekday(dato) returnerer hvilken dag i ugen 'dato' er - fx '1' for søndag, '2' for mandag osv. ved default indstilling (dvs. 1. dag i ugen er søndag) . Dette resultat bliver derpå assignet til myDate, som tolker værdien som om det var en dato (fordi myDate har typen Date). Dette giver følgende resultater:

1            31-12-1899
2            01-01-1900
3            02-01-1900
4            03-01-1900
5            04-01-1900
6            05-01-1900
7            06-01-1900

Altså '31-12-1899' for søndage, fx 12-07-2020, og '01-01-1900' for mandage, fx 07-12-2020 (7. december 2020) ...
kimidk1 Novice
14. juli 2020 - 15:04 #6
Tak for hjælpen - så er det blevet lidt klarere :-)
kimidk1 Novice
14. juli 2020 - 15:09 #7
I forbindelse med if -then-else, kan man sætte Access op til at linier mellem if/then og Else flytter ind automatisk ?
tjp Mester
14. juli 2020 - 15:51 #8
Ikke mig bekendt - jeg bruger tab og shift+tab til at rykke linjer frem og tilbage. NB du kan rykke flere linjer ad gangen, ved at markere dem alle og trykke tab :-)
bsn Seniormester
14. juli 2020 - 16:22 #9
#2

Det skulle gerne give det rigtige resultat...

Har du kopieret hele den sub ind jeg har lavet...?

Der er flere ændringer i den...
kimidk1 Novice
14. juli 2020 - 18:08 #10
Jeps, har rettet til som du har lavet sub'en og det virker :-)

men nu har jeg tænkt ;-) og hvis jeg ændrer myDate fra Date til Integer så virker det sku :-) - som den eneste ændring i forhold til den oprindelige sub tekst

for som du skriver så er datoer jo angivet internt i Access som et nummer som er lig med de værdier du angiver - og det er vel derfor det går galt ?
store-morten Ekspert
14. juli 2020 - 18:20 #11
Sub WhatTypeOfDay2()

Dim question As String
Dim day As String
Dim myDate As Date

question = InputBox("Enter any date " _
& Chr(13) & " (e.g., 07/14/2020 or 14-07-2020)")

myDate = CDate(question)

Select Case Weekday(myDate, vbMonday)
    Case Is = 1
        day = "mandag"
    Case Is = 2
        day = "tirsdag"
    Case Is = 3
        day = "onsdag"
    Case Is = 4
        day = "torsdag"
    Case Is = 5
        day = "fredag"
    Case Is = 6
        day = "lørdag"
    Case Is = 7
        day = "søndag"
End Select

MsgBox myDate & " er en " & day
End Sub
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Blandt 18.000 indberetninger om databrud er menneskefejl den mest almindelige: Sådan undgår din virksomhed de mest basale databrud
18.000 anmeldelser om databrud er tikket ind hos Datatilsynet siden siden GDPR-loven trådte i kraft. "Mange af de fejl, som vi ser, beror på relativt banale fejl,” lyder det fra tilsynets it-sikkerhedspecialist Allan Frank. Se her, hvordan du relativt nemt kan undgå dem.
Computerworld
IBM vinder millionaftale om nyt toldsystem
Skatteforvaltningen har tegnet en tiårig kontrakt IBM om levering af det sidste it-system til i en omfattende systemudskiftning i toldsystemerne og som først forventes afsluttet i 2025. Se alle detaljerne her.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Job & Karriere
Microsoft i kæmpe dansk satsning - åbner tre store datacentre i Danmark
Microsoft lancerer kæmpe satsning fra hovedkvarteret i Lyngby. Selskabet åbner tre store bæredygtige datacentre på Sjælland.
White paper
Cisco Umbrella: Sådan udvikler truslerne sig netop nu
Hver eneste dag håndterer de mere end 30 datacentre under Cisco Umbrella mere end 240 milliarder forespørgsler fra 190 lande. Det giver sikkerhedseksperter hos Cisco Talos et enestående datagrundlag for at kortlægge, hvordan cybertrusselsbilledet udvikler sig. I dette whitepaper kan du læse, hvordan trusselsbilledet har udviklet sig hen over 2020. Men – endnu vigtigere – om, hvordan din organisation bedst forbereder sig på at håndtere truslerne i tiden der kommer.