Avatar billede oasen Nybegynder
12. december 2002 - 08:35 Der er 8 kommentarer og
1 løsning

Indsæt dato i Access-db

Jeg er en smule i tvivl om indsættelse af datoer. Jeg har hidtil brugt et tekstfelt i stedet for et datofelt netop for at undgå disse problemer.
1) Når jeg indsætter værdien Now() Eller Date() er det ligegyldigt, om det er dansk eller engelsk format. Det bliver placeret korrekt i tabellen, hvis format jeg har angivet til "dd-mm-yyyy hh:nn:ss". Er det korrekt?
2) Hvis jeg indsætter en streng "03-04-2002 21:42:23" (3. april), kan jeg vel få problemer. Hvordan tolker SQL det m.h.t. dag og måned? Skal det skrives på amerikansk format, for at blive indsat korrekt?

Tak...
Avatar billede eagleeye Praktikant
12. december 2002 - 09:28 #1
1.: Hvis du vil indsætte now eller date i databasen via SQL så brug de indbyggede.

Hvis man dansk dato format i ASP koden og skriver:
"INSERT INTO xx (dato) VALUES (#" & date & "#)"
Så vil den tolke datoen forkert. For at bruge den interne dato function:
"INSERT INTO xx (dato) VALUES (date())"

2.: SQL tolker dato US/UK format de vil sigde:

yyyy-mm-dd  eller  mm-dd-yyyy

Så hvis du skriver 03-04-2002 vil den tolke 03 som månede og 04 som dagen.
Hvis man indsætter dato-tid skal det være i dette formart yyyy-mm-dd hh:nn:ss
Avatar billede oasen Nybegynder
12. december 2002 - 09:46 #2
Dvs. hvis jeg konsekvent indsætter i formatet yyyy-mm-dd hh:nn:ss vil der ikke opstår problemer? Så skal jeg bare have en lille funktion til at konvertere formatet lige før indsættelsen!?
Hvad skal jeg så angive formatet til i databasen - ovenstående eller alm. amerikansk?

Function ConvertDate(Dato)
    ConvertDate = Year(Dato) & "-" & Month(Dato) & "-" & Day(Dato) & " " & Time(Dato)
End Function

Var det noget i den stil?
Avatar billede eagleeye Praktikant
12. december 2002 - 09:53 #3
Hvis du indsætter i US/UK format via SQL giver det ikke problemmer.

Ja du skal lave en converter function, men jeg er ikke sikker på Time(dato) virker med ellers gør formatdatetime functionen:

Function ConvertDate(Dato)
    ConvertDate = Year(Dato) & "-" & Month(Dato) & "-" & Day(Dato) & " " & formatdatetime(Dato,vblongtime)
End Function


Det er lige meget hvilken format du køre i databasen det må gerne være dansk. Det er SQL standarten som siger dato via SQL skal være i formatet yyyy-mm-dd eller mm-dd-yyyy
Avatar billede oasen Nybegynder
12. december 2002 - 10:04 #4
Og når jeg skal udskrive burde jeg med fordel kunne anvende funktionen Format(Dato, 'dd-mm-yyyy hh:nn:ss')...

Så ville jeg nemlig holde det hele i US/UK-formatet internt og kun udskrive i dansk format.

Mon ikke det er det bedste?
Avatar billede eagleeye Praktikant
12. december 2002 - 11:00 #5
Ja det kan man men så skal du når du hendter fra databasen for at udskrive lave det til DK format. Det kan som du skriver gøres med:
Format(Dato, 'dd-mm-yyyy hh:nn:ss')...


Problemmet med DK dato format er at man skal konverter enten når man gemmer i databasen eller når man udskriver...


Du kan også prøv at skrive denne linie lige før du udskriver så kan man måske undvære format i SQL linien:

Session.LCID = 1030 


---
SQL = "SELECT dato FROM tabel"
..
..
Session.LCID = 1030 'Set dansk dato format
Response.write rs("dato")
Avatar billede oasen Nybegynder
12. december 2002 - 11:23 #6
Ja, hvis LCID sættes til dansk, behøver man ikke at formatere i SQL-sætningen.

Men så er jeg i tvivl om, hvad der sker, hvis jeg laver et udtræk. Et lille eks.:

Session.LCID = 1030
SQL = "Select Dato From Tabel Where Dato = #" & Date & "#"

Så sammenlignes en US-dato med en DK-dato, men det burde vel egentlig heller være noget problem, eller hvad siger du?
Avatar billede oasen Nybegynder
12. december 2002 - 12:13 #7
Jeg har lavet følgende funktion til konvertering af datoer. Den synes jeg selv er ret smart:


Function ConvertDate(Format)

      Format = Replace(Format, "dd", Day(Date))
      Format = Replace(Format, "mm", Month(Date))
      Format = Replace(Format, "yyyy", Year(Date))
      Format = Replace(Format, "hh", Hour(Time))
      Format = Replace(Format, "nn", Minute(Time))
      Format = Replace(Format, "ss", Second(Time))
      ConvertDate = Format

End Function


Og så kan den jo kaldes med en masse argumenter:

ConvertDate("mm-dd-yyyy hh:nn:ss")
Avatar billede eagleeye Praktikant
12. december 2002 - 16:17 #8
Arh ja . det var smart.

*markere teksten* *ctrl-c*
Avatar billede oasen Nybegynder
12. december 2002 - 17:00 #9
Hehe... tak for hjælpen :)
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