On Fri, 5 May 2006 07:02:16 +0200, "Henning Smed" <henning snabela
smeds.dk> wrote:
>Jeg har læst de 2 artikler og flere andre artikler på nettet, jeg havde
>håbet at kun klare mig med formater.
>Jeg er i gang med at modificere et websted som er flyttet fra en server i
>USA til Dk, siderne er skrevet med DreamWeaver og mine forsøg på at rette
>resulterer for det meste i at "håndkode" en ny side, jeg havde håbet at
>kunne formatere datoen ens i asp og Access for at undgå at skrive en del nye
>sider, men som du nævner vil problemet opstå igen hvis jeg skifter server.
>
>Så jeg må i gang med at skrive alt der anvender dato om, og skrive nogle
>"include filer" til at indsætte og vise dato.
Ja, der er ingen vej uden om, desværre, hvis man vil lave noget som
ikke bare giver nye problemer senere.
Men heldigvis er det ikke så svært, hvis bare man overholder den helt
simple regel med at skelne mellem dato-værdier og dato-formater.
Brug *altid* dato-funktionerne, når du arbejder med datoer og brug
aldrig #-angivelser i SQL-strenge.
Jeg har en fast include-fil, som indeholder:
<%
' -- DateToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateToSql slut --
%>
Den tager en *dato-værdi* fra ASP-scriptet som input og genererer en
tekststreng til SQL'en, som får databasen til også at modtage en
*dato-værdi*.
Den bruges således:
datMinDato = [en dato-værdi - fx den 5. maj kl. 23.30]
strSql = "INSERT INTO tblTabel (Datofelt)" & _
" VALUES (" & DateToSql(datMinDato) & ");"
Den Sql-streng, der sendes til databasen vil se således ud:
INSERT INTO tblTabel (Datofelt)
VALUES (DateSerial(2006, 5, 5) + TimeSerial(23, 30, 00));
Som du kan se, resulterer det i, at det er *databasens* DateSerial- og
TimeSerial-funktioner, der anvendes. Så databasen er *uafhængig* af
formatet, den får såden set kun overført tallene:
2006, 5, 5 og 23, 30, 00
indsat i de to funktioner. Og det kan ikke misforstås.
Ofte er det dog lige så praktisk at anvende dato-funktionerne direkte,
frem for DateToSql-funktionen. Hvis fx en bruger skal vælge en dato i
3 select-bokse (dag, måned, år), er der ofte ingen grund til først at
konvertere de 3 tal til en dato-værdi.
Hvis resultatet af select-boksen er 3 tal kaldet:
intDag, intMaaned, intAar
er det lige så nemt at indsætte dem direkte i SQL'en med:
INSERT INTO tblTabel (Datofelt)
VALUES (DateSerial(" & intAar & "," & intMaaned & "," & intDag & "));
- værdierne kommer fra scriptet, men funktionerne er databasens.
I dit tilfælde:
SELECT * FROM tblIncidentLog
WHERE 1=1 AND incidentDate BETWEEN #01-01-2005# AND #03-05-2006#
bliver det:
.... BETWEEN (DateSerial(2005, 1, 1) AND (DateSerial(2006, 5, 3)
>Hvis du har flere links til sider der forklarer Dato > SQL > Access så jeg
>kan forstå det vil det være fint.
Jeg ved egentlig ikke, om der er så meget mere at sige om emnet
Når først man har forstået det grundlæggende, så giver resten stort
set sig selv.
Det kan dog klart betale sig at bruge lidt tid til at sætte sig ind i
dato-funktionerne - både dem der hører til VBScript, og dem der hører
til Access (de er heldigvis ret ens) - så man ved, hvilke værktøjer,
der er til rådighed.
Good luck!
--
Jørn Andersen,
Brønshøj