Avatar billede macriis Nybegynder
06. september 2004 - 17:23 Der er 15 kommentarer og
1 løsning

ASP dato format til Access

Ja det måtte jo komme: endnu et spørgsmål om Access og datoformater.

Jeg har kigget lidt rundt på Eksperten og ledt efter den rigtige møde at indsætte datoer i Access og fundet adskillige. Dette er i og for sig udemærket, men var der én, der kunne sætte mig ind i den "korrekte"/"normale" syntaks?

eagleeye skriver ofte om Access og datoer:

"Bemærk SQL skal havde Dato i US/UK formatet som er yyyy-mm-dd eller mm-dd-yyyy og ikke som det danske dd-mm-yyyy. Så hvis du køre på DK server skal du formatere dato'en så den er i et af de to viste." - hvilket jeg finder mærkeligt, da jeg ofte benytter at indsætte Now i min Access db (DK-Access + DK/UK server), og kan benytte dato som det er tænkt. Jeg kan sortere på det som ønsket og kigger man i db'en står datoen på dansk format dd-mm-yyyy.
Så hvad er den rigtige metode?


Et mere specifikt spørgsmål?
Hvis en bruger fx indtaster datoen 24-12-2004 i et form-felt og jeg ønsker at indsætte det i en kolonne i Access, som er dato/tid formateret. Hvordan gøres dette? Skal man benytte formatdatetime() eller kan man blot fx gøre såden:
'" & request.form("datofelt") & " 12:00:00" & "'  ?
Avatar billede eagleeye Praktikant
06. september 2004 - 17:28 #1
Du tror måske ikke på hvad jeg skriver?
Avatar billede macriis Nybegynder
06. september 2004 - 17:39 #2
Hej eagleeye. Jo jeg plejer altid at tage dit ord som lov, men i dette tilfælde kan jeg simpelthen ikke forstå hvorfor mit virker som beskrevet, når jeg netop har erfaret at en indsættelse af Now i min Access-db netop indsætter et dansk dato-format (dd-mm-yyyy). Jeg leder egentlig blot efter den rigtige måde at gøre det på.

Og hvis man kan komme uden om at skulle til at gøre sådan fx:

dag = Day(date)
mdr = month(date)
yr = year(date)
dato = ""& dag &"-"& mdr &"-"& yr &""

strSQL = "INSERT INTO news (date) VALUES (" & dato & "')"

...så er det jo fint.
Avatar billede macriis Nybegynder
06. september 2004 - 17:40 #3
Jeg ønsker bare at få bekræftet at man også kan gøre som vist.

Samtidig ville det være dejligt at få et svar på det såkaldte mere specifikke spørgsmål.
Avatar billede eagleeye Praktikant
06. september 2004 - 18:05 #4
Hvis man skal overholde SQL standarten skal det være som yyyy-mm-dd eller mm-dd-yyyy hvis man sætte data ind i et Dato/klokkeslæt type felt. I Access bruger man # omkring datoer.

Det man skal huske på er at der er to dato formater på ens side:
1. Det som vises på ens side kan være:  06-09-2004 eller i dd-mm-yyyy
2. Det format som bruges til via SQL som er yyyy-mm-dd

Det man kan gøre er at lave en funktion datoToSQL(dato):

function datoToSQL(dato)
  datoToSQL  =Year(dato) & "-"  Right("0" & month(dato),2) & "-" & Right("0" & day(dato),2)
end function

og en med tid også:

function datoTimeToSQL(dato)
  datoToSQL  =Year(dato) & "-"  Right("0" & month(dato),2) & "-" & Right("0" & day(dato),2)
datoToSQL = datoToSQL & " " & Right("0" & Hour(dato),2) & ":" & Right("0" & minute(dato),2) & ":" & Right("0" & second(dato),2)
end function


Så lige meget om du bruge DK, US, UK, Tysk format på din side kan funktionen lave datoen om til yyyy-mm-dd som kan bruges via SQL.

strSQL "INSERT INTO news (date) VALUES (#" & datoToSQL(date) & "#)"

men bruger man Date eller Now kan man lige så godt bruge det som er indbygget i databasen:
strSQL "INSERT INTO news (date) VALUES (Date())"
Avatar billede eagleeye Praktikant
06. september 2004 - 18:12 #5
Skal lige nævne database formatere så datoen fra SQL yyyy-mm-dd til det format du har valgt i din Dato/klokkeslæt kolonne, som kunne være dd-mm-yyyy.
Avatar billede macriis Nybegynder
06. september 2004 - 18:38 #6
Nu tror jeg at det lige før der er ved at gå noget op for mig :-)

Jeg har indtil nu været vant til at gøre sådan når jeg har indsat en dato for fx hvornår en post er oprettet '" & Now "'. Er det korrekt forstået at jeg her har benyttet Access' måde at vise datoer på? Hvilket også er forklaringen på at når jeg kigger i Access (DK version) så står mine datoer på formen dd-mm-yyyy tt:mm:ss?
Og derfor har det heller ikke været nødvendigt at benytte # omkring datoen?

Er det så fordi jeg har en dansk Access at det netop er på denne form?

Hvad skal jeg så gøre nu, hvor jeg har brug for at en indtastning fra et tekstfelt skal gemmes i en Dato/klokkeslæt kolonne? Brugeren indtaster på formen dd-mm-yyyy. Kan jeg så ikke blot gemme denne som #" & Request.Form(datofelt) & "#?
Avatar billede superraider Nybegynder
06. september 2004 - 19:18 #7
de der functioner, jeg kan ikke få  dem til at virke.

når jeg lave en

response.write datoTimeToSQL("12-12-2004 12:00:22")
så for jeg bare >> Tildelingen er ugyldig: 'datoToSQL'
Avatar billede eagleeye Praktikant
06. september 2004 - 21:02 #8
ok ja denne funktion datoTimeToSQL skal være:

function datoTimeToSQL(dato)
  datoTimeToSQL  =Year(dato) & "-"  Right("0" & month(dato),2) & "-" & Right("0" & day(dato),2)
datoTimeToSQL = datoTimeToSQL & " " & Right("0" & Hour(dato),2) & ":" & Right("0" & minute(dato),2) & ":" & Right("0" & second(dato),2)
end function
Avatar billede eagleeye Praktikant
06. september 2004 - 21:12 #9
Når du indsætter det med ' omkring indsætter du det som en streng. Så det vil gå godt men du kan ikke bruge ' i en where del, så drefor kan man ligeså godt gøre det med # omkring:
SQL = "select * from spm536829 where dato > '01-08-2004'"  'virker ikke
Avatar billede macriis Nybegynder
06. september 2004 - 21:29 #10
Ok. Jeg tester pt. med et script med følgende kode:

formDato = Request.Form("dato")
dato = Year(formDato) & "-" & Month(formDato) & "-" & Day(formDato)

... VALUES (#" & dato & "# ...

og det virker faktisk rigtig fint. For at være sikker på at der indtastes en korrekt dato, er det så rigtigt at benytte funktioen IsDate(formDato)?

Smid et svar og få point.
Avatar billede eagleeye Praktikant
06. september 2004 - 21:36 #11
Ja man kan bruge isDate til at validere datoen er korrekt.
Avatar billede macriis Nybegynder
06. september 2004 - 21:41 #12
Du skal have rigtig mange tak for hjælpen.
Avatar billede superraider Nybegynder
06. september 2004 - 22:01 #13
jeg tror ikke helt jeg ahr forstået ideen med at ændre datoformaten til UK,  synes ikke at have stødt på nogen fejl, hvor jeg har brugt almindelig dansk format??
Avatar billede eagleeye Praktikant
06. september 2004 - 22:06 #14
Det var bare som ekspempel på du kan køre hvilket dato format du har lyst til. Det er ingen problem i at køre DK format.
Avatar billede superraider Nybegynder
06. september 2004 - 22:22 #15
ok
Avatar billede macriis Nybegynder
14. september 2004 - 12:06 #16
eagleeye > Se venligst http://www.eksperten.dk/spm/539503
Avatar billede 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. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

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