Søger du en specifik kategori?

 



Oprettet ons. d. 04. februar 2009 kl. 01:17

eagleeye
eagleeye (330.565 point)
www.eagleeye.dk
Guidens karaktér
1
2
3
4
5

Dato problem med SQL og Access

Beskriver hvordan man bruger datoer med Access og giver løsningen på problemet: Access bytter rundt på dag og måned.
Når man bruger danske datoer og Access kan man opleve Access bytter rundt på måned og dag. Problemet opstår fordi Access bruger US eller UK dato format via SQL, som enten er yyyy-mm-dd eller mm-dd-yyyy.

Når man så indsætter en dato i dansk dato format som er dd-mm-yyyy, vil Access bytte rundt på dag og måned i datoen.

Der er en løsning og det er at bruge dato funktionerne Year, Month og Day til at formatere din dato.

Kode eksemple for Access, husk Access bruger # omkring datoen:
<%
dato = "04-06-2003"
strDato = Year(dato) & "-" & Month(dato) & "-" & Day(dato)
SQL = "INSERT INTO tablenavn (dato) VALUES (#" & strDato & "#)"
%>


Det samme gæler når man henter poster ud fra Access det er bare en SELECT SQL man bruger:
<%
dato = "04-06-2003"
strDato = Year(dato) & "-" & Month(dato) & "-" & Day(dato)
SQL = "SELECT * FROM tabelnavn WHERE dato = #" & strDato & "#"
%>


Jeg kan anbefale at lave en funktion som kan lave dato eller dato/klokkeslæt om til formatet yyyy-mm-dd hh:nn:ss som bruges i SQL.
<%
function datoToSQL (s)
datoToSQL = Year(s) & "-" & Right("0" & Month(s),2) & "-" & Right("0" & Day(s),2)
  if inStr(1, s, ":") > 0 then
    datoToSQL = datoToSQL & " " & Right("0" & Hour(s),2) & ":" & Right("0" & minute(s),2)
    datoToSQL = datoToSQL & ":" & Right("0" & Second(s),2)
  end if
end function
%>

Samme kode eksempel fra før, nu med brug af funktionen:
<%
dato = "04-06-2003"
SQL = "SELECT * FROM tabelnavn WHERE dato = #" & datoToSQL(dato) & "#"
%>


Når man arbejder med datoer på ens side skal man vide der er 3 dato formater:
1. Dato formatet på ens hjemmeside. Det er det dato format som vises til brugerne, og typisk vil det være dansk format dd-mm-yyyy, men det også være et helt andet format hvis man har specielle ønsker.
2. Dato formatet man bruger via SQL. Dette dato format er yyyy-mm-dd som beskrevet i artiklen.
3. Dato formatet man gemmer datoen i databasen. Det betyder ikke så meget hvilket format man vælger men igen ville man typisk bruge dansk format.

Vil man være bare lidt seriøs ASP programmør, også selvom det kun er "hobby programmør" skal man ikke springe over hvor gæret er lavest og gemmer datoer i enten en tal eller tekst kolonne. Selv hvis man bruger en tal/tekst kolonne skal man alligevel formatere datoen til kolonnen, så hvorfor ikke formatere dato så den kan lægges i en dato kolonne?

Dato/klokkeslæt typen giver også nogle fordele:
1. Der er et stort udvalg af dato funktion som kan benyttes direkte i SQL sætningen, det kan man ikke men en tekst eller tal kolonne uden man skal havde tungen meget lige i munden for at konvertere tallet/teksten til en dato.

2. Når man udskriver fra reecordsetet formateres datoen automatisk til det dato format du har valgt på din hjemmeside med Session.LCID. Det betyder du ikke skal til endnu engang at formatere dato som man skulle hvis det var en tal kolonne.

Som afrunding, lad mig slå en ting fast: Gem altid datoer i en kolonne af typen Dato/Klokkeslæt eller på engelsk Date/Time.

Skrevet man. d. 12. januar 2004 kl. 23:18| #1

tuctoh (17.143 point)
Efter egen erfaring er problemet lige så ofte at man bruger databasen fra forskellige access installationer, som alle har forskellige dato-opsætninger. Den bedste løsning mener jeg er at bruge et tal-felt, og taste datoer ind i formatet yyyymmdd, derved kan man altid sortere på datoen, og får aldrig problemer med forkerte datoer.

Skrevet ons. d. 14. januar 2004 kl. 00:31| #2

bernhof (22.843 point)
Dette er et problem, som mange - deribland mig selv - har stødt ind i mange gange tidligere, og hvis man vil bruge Access' dato-felt, er den beskrevne måde den bedste måde at gøre det på, efter min erfaring.

Skrevet ons. d. 14. januar 2004 kl. 04:36| #3


Skrevet tor. d. 15. januar 2004 kl. 23:22| #4

wilweb (18.647 point)
God enkel artikel der virker!

Skrevet tir. d. 03. august 2004 kl. 14:28| #5

coolstar (19.027 point)
Hvem bruger dog access, når man kan få MySQL & MS SQL, well ikke mig :)

Sku lige se hvad han havde gang i her. Blev ikke klogere da jeg i forvejen vidste det :)

Skriv en kommentar



Mest populære guides i Linux - Generelt

Guidens karakter
!!!Karaktér: 4
5 stemmer
24/02 - 2010
Af: mrmox2

Installation af flash og java-support i din foretrukne browser under linux

Java installeres ikke som standard i din browser under linux, og hvis du vil bruge din egen browser, fx firefox, er flash heller ikke installeret. Det tager kun 5 minutter at gøre det.

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger