/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
dato og Session.LCID = 1030
Fra : Christian M. Nielsen


Dato : 30-01-03 20:35

Jeg har et underligt problem med datoer.

I min global.asa har jeg Session.LCID = 1030 og det samme har jeg på den
side jeg kører min strSQL. Det virker fint på min IIS og Access2000, men på
serveren går det galt. Jeg kan ikke finde datoer med dansk datoformat, men
kun engelsk.

Jeg starter min sub på denne måde

<% Sub Show()
Session.LCID = 1030
dim strDate1

strDate1 = FormatDateTime((now()),2)


strSQL = "SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma,
BrugerID FROM tblNewBizz WHERE (((Kontaktes =#"&strDate1&"#) OR (
KontaktesII =#"&strDate1&"# ))) AND ((Relation ='" & Session("BrugerID")
&"') or (RelationII ='" & Session("BrugerID") &"')) ORDER BY Firma ASC"
openRecordset(strSQL)


En response.write strSQL ser forskellig ud på min IIS og online.

lokalt ser den således ud :

SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma, BrugerID FROM
tblNewBizz WHERE (((Kontaktes =#1/30/2003#) OR ( KontaktesII
=#1/30/2003# ))) AND ((Relation ='trs') or (RelationII ='trs')) ORDER BY
Firma ASC

på online ser den således ud.

SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma, BrugerID FROM
tblNewBizz WHERE (((Kontaktes =#30-01-03#) OR ( KontaktesII =#30-01-03# )))
AND ((Relation ='trs') or (RelationII ='trs')) ORDER BY Firma ASC

Lokalt er det med engelsk datoformat og online er det dansk.

Det jeg undrer mig over er, hvis jeg vælger en record, og får datoerne at
se, så er de med dansk datoformat. Det er de også hvis jeg åbner databasen
og ser direkte deri. Hvis jeg gemmer en opdatering, og har skrevet med dansk
datoformat, så gemmes den også I dansk format. Hvis jeg indtaster i engelsk
format og derefter ser recorden så er datoen lavet om til dansk format.

På siden er der endvidere en søgefunktion for datoer. Her får jeg samme
resultat (online og lokalt) hvis jeg søger med dansk eller engelsk
datoformat. dd-mm-yyyy / mm-dd-yyyy
jeg kan også få resultaterne hvis jeg søger på mm-dd-yy men IKKE dd-mm-yy
hvilket også undrer mig en del.

Er der nogen der har en ide om hvad der er glat eller hvad jeg skal lede
efter?

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



 
 
Jens Gyldenkærne Cla~ (30-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-01-03 22:48

Christian M. Nielsen skrev:

> strDate1 = FormatDateTime((now()),2)

Hvorfor lader du ikke Access om at generere datoværdien? Med dags
dato er det langt lettere at holde funktionskoden i Access:

....WHERE (Kontaktes = Date) OR (KontaktesII = Date)....

(Date giver datoen uden tid, Now virker præcis som asp).

Med eksplicitte værdier kan man bruge funktionen DateSerial(year,
month, day).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Christian M. Nielsen (31-01-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 31-01-03 16:06


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns9313E7FA7D0DBjcdmfdk@gyrosmod.cybercity.dk...
> Christian M. Nielsen skrev:
>
> > strDate1 = FormatDateTime((now()),2)
>
> Hvorfor lader du ikke Access om at generere datoværdien? Med dags
> dato er det langt lettere at holde funktionskoden i Access:
>
> ...WHERE (Kontaktes = Date) OR (KontaktesII = Date)....
>
> (Date giver datoen uden tid, Now virker præcis som asp).


Ok, det var jeg ikke klar over. Det ændrer dog ikke på min problemstilling.

Jeg har prøvet at uploade siden til et andet webhotel (Azero) og der er der
ingen problemer. De er kun på det første webhotel jeg uploadede til
(Scannet). Dette undrer mig en del, men de kører åbenbart ikke samme
opsætning af deres servere (?).

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



Jens Gyldenkærne Cla~ (31-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-01-03 20:01

Christian M. Nielsen skrev:

>> ...WHERE (Kontaktes = Date) OR (KontaktesII = Date)....
>>
>> (Date giver datoen uden tid, Now virker præcis som asp).
>
>
> Ok, det var jeg ikke klar over. Det ændrer dog ikke på min
> problemstilling.

Det forstår jeg ikke. Ved at bruge en datofunktion i Access er du
netop fuldstændig uafhængig af indstillinger for datoformat.

> Jeg har prøvet at uploade siden til et andet webhotel (Azero)
> og der er der ingen problemer.

Fint - så er problemet jo løst.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Carsten Suurland (31-01-2003)
Kommentar
Fra : Carsten Suurland


Dato : 31-01-03 00:27

Hej Christin

Jeg ved det måske er lidt sent at lave om på nu, men gør dig selv en
tjeneste:

Lad være med at bruge datofelter i din database!!!

Opret alle datoer som en float (double) i Access, og gem/forespørg så med de
tal der svarer til dine datoer.

F.eks.

'Læs dato
Dim ThisDate
ThisDate = CDate(rs("MyDate").Value)

'Gem dato
Dim ThisDate
ThisDate = CDbl(Now())
.... INSERT INTO bla bla VALUES (ThisDate, bla bla)

'Forespørg på dato
Dim ThisDate
ThisDate = CDbl(Now())
....SELECT bla bla FROM bla WHERE HideDate < " & ThisDate

På den måde er du fri for at tænke på datoformater... ikke noget med
#dd-mm-yyyy# eller #yyyy/mm/dd#, som alligevel sikkert vil fejle hvis du
flytter over til at andet format end Access

/Carsten Suurland



Torben Brandt (31-01-2003)
Kommentar
Fra : Torben Brandt


Dato : 31-01-03 00:47

Carsten Suurland wrote in dk.edb.internet.webdesign.serverside.asp:
> Jeg ved det måske er lidt sent at lave om på nu, men gør dig selv en
> tjeneste:
>
> Lad være med at bruge datofelter i din database!!!
>
> Opret alle datoer som en float (double) i Access, og gem/forespørg så med de
> tal der svarer til dine datoer.
>
> F.eks.
>
> 'Læs dato
> Dim ThisDate
> ThisDate = CDate(rs("MyDate").Value)
>
> 'Gem dato
> Dim ThisDate
> ThisDate = CDbl(Now())
> .... INSERT INTO bla bla VALUES (ThisDate, bla bla)
>
> 'Forespørg på dato
> Dim ThisDate
> ThisDate = CDbl(Now())
> ....SELECT bla bla FROM bla WHERE HideDate < " & ThisDate
>
> På den måde er du fri for at tænke på datoformater... ikke noget med
> #dd-mm-yyyy# eller #yyyy/mm/dd#, som alligevel sikkert vil fejle hvis du
> flytter over til at andet format end Access

Jeg brugte tidligere tekststrenge til at indeholde datoer/tider som f.eks.
"yyyymmddhhmm", men jeg er gået over til dato-felter fordi det trods alt er
nemmere end strenge.
Der bruger jeg dog DateSerial og TimeSerial, for at være sikker på at datoen
overføres korrekt til databasen.
Og når jeg trækker datoerne ud igen, bruger jeg enten FormatDateTime eller
Day/Month/Year funktionerne.

/Torben

--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Carsten Suurland (31-01-2003)
Kommentar
Fra : Carsten Suurland


Dato : 31-01-03 01:13

Hej Torben

Jamen så er du da også inde på noget af det rigtige
Jeg har bare set så mange gange, at folk bruger datofelter "som de er" og
dermed ikke altid får tænke konsekvenserne til ende.

/Carsten



Jørn Andersen (31-01-2003)
Kommentar
Fra : Jørn Andersen


Dato : 31-01-03 01:55

On Thu, 30 Jan 2003 23:47:19 +0000 (UTC), Torben Brandt
<torben@actuar.dk> wrote:

>Carsten Suurland wrote in dk.edb.internet.webdesign.serverside.asp:
<snip>
>> Lad være med at bruge datofelter i din database!!!
>>
>> Opret alle datoer som en float (double) i Access, og gem/forespørg så med de
>> tal der svarer til dine datoer.
<snip>
>Jeg brugte tidligere tekststrenge til at indeholde datoer/tider som f.eks.
>"yyyymmddhhmm", men jeg er gået over til dato-felter fordi det trods alt er
>nemmere end strenge.
>Der bruger jeg dog DateSerial og TimeSerial, for at være sikker på at datoen
>overføres korrekt til databasen.
>Og når jeg trækker datoerne ud igen, bruger jeg enten FormatDateTime eller
>Day/Month/Year funktionerne.

Jeg synes også Torbens metode klart er at foretrække.
Ulempen med Carstens er, at man ikke kan udnytte (eller: det er i
hvert fald langt sværere) den vifte af dato-funktioner, der er
indbygget i de fleste databasers SQL-sprog.

Min erfaring er, at det der går galt for de fleste er, at de gør deres
kode afhlængig af et bestemt *format*.
I stedet skal man sikre sig, at man får overført dato-*værdierne*
mellem database og script.
Og det er det Torben gør med hhv. DateSerial/TimeSerial og
Day/Month/Year-funktionerne.


PS: Gider du tage et kig på:
<URL: http://www.usenet.dk/netikette/citatteknik.html>

--
Jørn Andersen,
Brønshøj

Christian M. Nielsen (01-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 01-02-03 17:11

ok, jeg tror jeg opgiver datofelter i Access 2000. Hvis jeg søger direkte
deri, via en sql forespørgsel som den ser ud nedenfor, så får jeg listet dem
for 2 januar, og ikke dem for første februar. Jeg har set på nogle
forskellige records, og de har alle "01-02-2003" til at stå som værdi, men
de kan kun findes via nedenstående sætning.

SELECT BrugerID, Firma, Kontaktes FROM tblNewbizz WHERE
(((tblNewbizz.Kontaktes)=#1/2/2003#)) OR
(((tblNewbizz.KontaktesII)=#1/2/2003#));

Jeg har et søgefelt online i asp, og indtaster jeg 2 januar (02/01/2003), så
får jeg dem fem der skal første februar. Når jeg trykker for at se den
record der kommer frem under søgningen, viser den at den skal kontaktes d.
første februar (hvis jeg sætter <%=formatDateTime(oRs("Kontaktes"),1)%> får
jeg "1. februar 2003" udskrevet). Jeg er nu ret forvirret mht.disse
datofelter. Min asp kode tolker fint det der står i felterne, så det er
åbenbart måden access bliver behandlet på, der er forskellig fra IIS og til
et online webhotel og disse imellem.

Der har været angivet andre løsningsforslag til behandling af datoer som jeg
har set lidt på, men jeg har et par spørgsmål.

Hvis man bruger et tekstfelt i stedet for et datofelt hvorledes vil en
søgefunktion efter datoer så se ud? Hvorledes skal en dato gemmes i
teksstrengen? (dd-mm-yyyy) eller? (jeg skal ikke bruge klokkeslet, kun
dato.)

"Carsten Suurland" <removethiscarsten@suurland.dk> wrote in message
news:b1ccb5$le8$1@news.cybercity.dk...

gav et eksempel, men jeg kan ikke helt gennemskue hvad der menes

> Opret alle datoer som en float (double) i Access, og gem/forespørg så med
de
> tal der svarer til dine datoer.

Min access er dansk og jeg kan ikke lige se en datatype der modsvarer "
float " deri.

> 'Forespørg på dato
> Dim ThisDate
> ThisDate = CDbl(Now())
> ...SELECT bla bla FROM bla WHERE HideDate < " & ThisDate

Jeg vil gerne vide hvad HideDate er ??


>'Gem dato
>Dim ThisDate
>ThisDate = CDbl(Now())
>... INSERT INTO bla bla VALUES (ThisDate, bla bla)

i linien "ThisDate = CDbl(Now())" hvad er CDbl() ???? Er det noget der er
indbygget i ASP?


--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice





Jørn Andersen (01-02-2003)
Kommentar
Fra : Jørn Andersen


Dato : 01-02-03 18:18

On Sat, 1 Feb 2003 17:11:24 +0100, "Christian M. Nielsen"
<christian@(REMOVE)cmnielsen(DOT)dk> wrote:

>ok, jeg tror jeg opgiver datofelter i Access 2000.

Lad være med det.

>Hvis jeg søger direkte
>deri, via en sql forespørgsel som den ser ud nedenfor, så får jeg listet dem
>for 2 januar, og ikke dem for første februar. Jeg har set på nogle
>forskellige records, og de har alle "01-02-2003" til at stå som værdi, men
>de kan kun findes via nedenstående sætning.
>
>SELECT BrugerID, Firma, Kontaktes FROM tblNewbizz WHERE
>(((tblNewbizz.Kontaktes)=#1/2/2003#)) OR
>(((tblNewbizz.KontaktesII)=#1/2/2003#));

Prøv at bruge denne funktion:
<url:
http://groups.google.com/groups?hl=da&selm=1879jt0nj8ng3066tpe91bs1frm82c7u2p%404ax.com>
(Du'r til Access, men vistnok ikke til MSSQL - som har nogle andre
indbyggede funktioner end Access).

Humlen ved den er, at du sikrer, at det er dato-*værdier* du overfører
fra script til database - så dit script ikke er afhængigt af et
bestemt datoformat.

Som du skriver det, overfører du en tekststreng (1/2/2003), som du
satser på, at databasen forstår korrekt. Tilsyneladende bruger din db
engelsk og ikke dansk dato-format, hvorfor den selvfølgelig misforstår
din tekststreng. Ved at bruge databasens indbyggede dato-funktioner,
gør du dig uafhængig af, hvilket *format* den foretrækker.

Jeg havde på et tidspunkt nogle sider, som startede med at ligge på en
server med danske sprog-indstillinger. På et tidspunkt blev den
udskiftet, og man glemte/valgte ikke at indstille til dansk
dato-format. Resulatet var selvfølgelig, at siderne gav forkerte
resultater. Ved at bruge nævnte funktion, slap jeg ud over problemet.

<snip>
>Der har været angivet andre løsningsforslag til behandling af datoer som jeg
>har set lidt på, men jeg har et par spørgsmål.
>
>Hvis man bruger et tekstfelt i stedet for et datofelt hvorledes vil en
>søgefunktion efter datoer så se ud? Hvorledes skal en dato gemmes i
>teksstrengen? (dd-mm-yyyy) eller? (jeg skal ikke bruge klokkeslet, kun
>dato.)

Lad være - du skaber dig bare nogle nye problemer. Plus at du
afskriver dig muligheden for (eller i hvert fald gør det voldsomt
sværere) at bruge de indbyggede dato-funktioner i databasen.

Datoer kan være drilske i ASP (såvel som i andre sammenhænge, hvor der
kan være forskllige formater), men det kan altså læres

1. Sørg for at bruge Session.LCID = 1030 i toppen af alle dine sider
med datoer.
2. Brug ovennævnte funktion, når du skal omsætte mellem script og
database.

Hvis du overholder disse to regler, så går det sjældent galt.
Hvis du har behov for at beregne i dit script, så vær sikker på, at
det er dato-*værdier*, du beregner på, og ikke et bestemt format.

FormatDateTime bør kun bruges til egentlig udskrift på siden.
FormatDateTime afleverer jo ikke et resultat i dato-/tid-format, men
som en tekststreng. Og tekststrenge er altså farlige at tolke som
datoer.


Lige et par korte svar til Carstens forslag (som jeg dog vil fraråde):

>"Carsten Suurland" <removethiscarsten@suurland.dk> wrote in message
<snip>
>> Opret alle datoer som en float (double) i Access, og gem/forespørg så med
>de
>> tal der svarer til dine datoer.
>
>Min access er dansk og jeg kan ikke lige se en datatype der modsvarer "
>float " deri.

På dansk skal du oprette feltet med
Datatype: Tal
Feltstørrelse: Dobbelt reelt tal


>> ...SELECT bla bla FROM bla WHERE HideDate < " & ThisDate
>
>Jeg vil gerne vide hvad HideDate er ??

Det er bare navnet på "dato"-feltet (som altså ikke er i dato-format,
men i ovennævnte Double.

>i linien "ThisDate = CDbl(Now())" hvad er CDbl() ???? Er det noget der er
>indbygget i ASP?

Ja (eller rettere i VB Script) - og i Access. Det er en
konverteringsfunktion, som konverterer til ovennævnte format (Dobbelt
reelt tal).

Andre af samme slags er fx: CInt(var), CLng(var) - afhængigt af
hvilket tal, der er tale om.


Kig i VBScript-dokumentationen - den er uundværig til den slags
spørgsmål:
<URL:
http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28001169>

VBScript-dokumentation kan downloades herfra:
<URL:
http://www.msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/728/msdncompositedoc.xml&frame=true>
- eller direkte:
<URL:
http://download.microsoft.com/download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe>

Hvis du downloader og installerer den på din egen maskine, har du den
som en Windows Help-file (.chm-format) - uundværlig efter min mening.


Good luck!

--
Jørn Andersen,
Brønshøj

Christian M. Nielsen (01-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 01-02-03 20:49



> Prøv at bruge denne funktion:
<url:
http://groups.google.com/groups?hl=da&selm=1879jt0nj8ng3066tpe91bs1frm82c7u2
p%404ax.com>
> (Du'r til Access, men vistnok ikke til MSSQL - som har nogle andre
> indbyggede funktioner end Access).

Jeg havde set på den da jeg løb in i problemerne, men nu vil jeg prøve at
sætte den ind i min kode.


> >Hvis man bruger et tekstfelt i stedet for et datofelt hvorledes vil en
> >søgefunktion efter datoer så se ud? Hvorledes skal en dato gemmes i
> >teksstrengen? (dd-mm-yyyy) eller? (jeg skal ikke bruge klokkeslet, kun
> >dato.)
>
> Lad være - du skaber dig bare nogle nye problemer. Plus at du
> afskriver dig muligheden for (eller i hvert fald gør det voldsomt
> sværere) at bruge de indbyggede dato-funktioner i databasen.
>
> Datoer kan være drilske i ASP (såvel som i andre sammenhænge, hvor der
> kan være forskllige formater), men det kan altså læres

Det var også min umiddelbare holdning at holde mig til datofelter, men andre
forslag blev givet, og når man er på herrens mark lytter man jo til de råd
der kommer

> 1. Sørg for at bruge Session.LCID = 1030 i toppen af alle dine sider
> med datoer.

Er det ikke nok med Session.LCID = 1030 i global.asa?

> 2. Brug ovennævnte funktion, når du skal omsætte mellem script og
> database.

Jeg forsøger mig frem


> FormatDateTime bør kun bruges til egentlig udskrift på siden.
> FormatDateTime afleverer jo ikke et resultat i dato-/tid-format, men
> som en tekststreng. Og tekststrenge er altså farlige at tolke som
> datoer.

Det var også for at se om jeg havde den rette dato, Det er jo svært at vide
når der står 1/2/03 om det er januar aller februar der er tale om?

> Lige et par korte svar til Carstens forslag (som jeg dog vil fraråde):

Tak for svarene.

> Kig i VBScript-dokumentationen - den er uundværig til den slags
> spørgsmål:

Jeg forsøger mig frem igen.

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942



F.Larsen (02-02-2003)
Kommentar
Fra : F.Larsen


Dato : 02-02-03 11:49

"Christian M. Nielsen" <christian@(REMOVE)cmnielsen(DOT)dk> wrote in message
news:3e3c24a2$0$1779$ba624c82@nntp03.dk.telia.net...

> Jeg forsøger mig frem igen.

En god ide er at placere konverteringen i en funktion (f.eks.
getDBDate(strDate)), så hvis du på et tidspunkt skal skifte database skal du
kun rette et sted.

--
Flemming
http://home.cbkn.dk/Spyware/
http://home.cbkn.dk/Spam/




Christian M. Nielsen (03-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 03-02-03 22:46


"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:jkun3v0b5ranltf7hi2cv8b05seq0sjdk2@4ax.com...

>
> Prøv at bruge denne funktion:
> <url:
>
http://groups.google.com/groups?hl=da&selm=1879jt0nj8ng3066tpe91bs1frm82c7u2
p%404ax.com>
> (Du'r til Access, men vistnok ikke til MSSQL - som har nogle andre
> indbyggede funktioner end Access).

Så vidt jeg kan se, så er det for (Now), men hvad hvis jeg vil gemme en
anden dato f.x "9 februar 2003", hvordan skal datoen så indsættes? og
hvordan søges på den selv samme dato?
--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



Torben Brandt (03-02-2003)
Kommentar
Fra : Torben Brandt


Dato : 03-02-03 23:20

Christian M. Nielsen wrote in dk.edb.internet.webdesign.serverside.asp:
> Så vidt jeg kan se, så er det for (Now), men hvad hvis jeg vil gemme en
> anden dato f.x "9 februar 2003", hvordan skal datoen så indsættes? og
> hvordan søges på den selv samme dato?

Når du skal overføre en dato til databasen via SQL, så skal du ikke overføre en
dato i et specielt _format_, men derimod overføre _værdierne_ i datoen (dag,
måned, år).

Indsættelse af datoen dtDate i en database:
iDag = Day(dtDate)
iMaaned = Month(dtDate)
iAar = Year(dtDate)
sSQL = "INSERT INTO Tabel (datoFelt) VALUES (DateSerial(" & iAar & ", " &
iMaaned & ", " & iDag & "))"
oConn.Execute(sSQL)

Udtræk af poster med datoFelt = dtDate
iDag = Day(dtDate)
iMaaned = Month(dtDate)
iAar = Year(dtDate)
sSQL = "SELECT id FROM Tabel WHERE datoFelt = DateSerial(" & iAar & ", " &
iMaaned & ", " & iDag & ")"
oConn.Execute(sSQL)

På denne måde vil der altså i SQL-strengen komme til at stå f.eks.:
...DateSerial(2002, 12, 31)...
som giver datoen 31. dec. 2002.
Da år altid kommer først, og derefter måned og dag, så kan databasen ikke tage
fejl!


Hvis man skal overføre et tidspunkt, så kan man bruge TimeSerial(...) og hvis
man til overføre en dato og tid, kan man bruge DateSerial(...) +
TimeSerial(...)

Det kan godt se lidt besværligt ud i starten, men man slipper helt for alt der
format-fnidder, som ellers kommer med datoer.
Funktionerne DateSerial og TimeSerial findes også i ASP, så når du skal
oversætte bruger-input (f.eks. fra en form) til ASP-datoer, så kan de også
bruges.

Husk også _aldrig_ at bruge CStr(dtDate) eller implicit konvertering
Date->String. Brug i stedet DateTimeFormat eller Day, Month, Year,
DatePart-funktionerne.
På den måde er det dato-værdierne der er i centrum, og ikke formatet af datoen.


Personligt bruger jeg aldrig "Session.LCID = 1030", for ved at bruge de
funktioner, jeg har nævnt i dette indlæg, så afhænger koden slet ikke af
format-indstillingerne.
[Undtaget DateTimeFormat, men ved hjælp af fx DatePart kan man lave sin egen
funktion af Dato -> dd/mm/åååå, som ikke afhænger for format-indstillingerne]

mvh Torben

--
Danmarks største specialiserede IT jobdatabase
- Udelukkende med IT- og internetrelaterede jobs
- Opret en profil og lad drømmejobbet finde dig
KLIK HER! => http://www.html.dk/job

Jørn Andersen (05-02-2003)
Kommentar
Fra : Jørn Andersen


Dato : 05-02-03 05:52

On Mon, 3 Feb 2003 22:45:53 +0100, "Christian M. Nielsen"
<christian@(REMOVE)cmnielsen(DOT)dk> wrote:

>"Jørn Andersen" <jorn@jorna.dk> wrote in message
>news:jkun3v0b5ranltf7hi2cv8b05seq0sjdk2@4ax.com...
>
>> Prøv at bruge denne funktion:
>> <url:
>>
>http://groups.google.com/groups?hl=da&selm=1879jt0nj8ng3066tpe91bs1frm82c7u2
>p%404ax.com>
>> (Du'r til Access, men vistnok ikke til MSSQL - som har nogle andre
>> indbyggede funktioner end Access).
>
>Så vidt jeg kan se, så er det for (Now)


Det er rigtigt, at eksemplet er vist med Now (hvilket er lidt
åndssvagt ... [1]), men du kan indsætte en hvilken som helst
dato-/tid-værdi.
Det eneste du skal sikre dig er, at datoen er korrekt i forhold til
dit script, så vil funktionen sørge for, at overførslen til databasen
sker korrekt.


Jeg prøver lige at gennemgå, hvad der sker undervejs.

Funktionen ser således ud:
' -- DateToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateToSql slut --

Din SQL-streng kunne så se ud som:
strSql = "SELECT felt1, felt2 FROM tblTabel" & _
" WHERE datofelt1 = " & DateToSql(minDatoTid)

Hvis du så har en gyldig dato i dit ASP-script (minDatoTid), vil
funktionen fx levere et resultat, som kunne se således ud:
(Hvis minDatoTid er: 3 Feb 2003 22:45:53)

DateToSql = "DateSerial(2003, 2, 3) + TimeSerial(22, 45, 53)"

Din SQL-streng vil se således ud, når den fyres afsted mod databasen:
strSql = "SELECT felt1, felt2 FROM tblTabel" & _
" WHERE datofelt1 = " & _
"DateSerial(2003, 2, 3) + TimeSerial(22, 45, 53)"

Humlen er så, at DateSerial og TimeSerial-funktionerne foregår i
Access. De er derfor uafhængige af dit script.
Hvis serveren skifter sprog, så vil det ikke påvirke dit ASP-sites
funktionalitet

>men hvad hvis jeg vil gemme en
>anden dato f.x "9 februar 2003", hvordan skal datoen så indsættes? og
>hvordan søges på den selv samme dato?

Du skal som nævnt bare sørge for, at din dato er en gyldig dato fra
din formular. (Hvis det er dér du har den fra.)

Det gøres sikrest bed at bruge Select-bokse i formularen frem for at
lade folk skrive datoen. Hvis du fx ikke har brug for tiden, men kun
datoen, og du har en select-boks for hhv. dayo, måned og år, så er der
faktisk ikke nogen grund til at danne en genetlig dato ud fa disse
værdier (medmindre det er for at checke om der er valgt rigtigt i f.t.
28, 29, 30 31 dage i måneden).
Så overfører du bare værdierne direkte:

.... " WHERE datofelt1 = " & _
"DateSerial(" & lngValgtAar & ", " & lngValgtMaaned & ", " & _
lngValgtDag & ")"


Håber det giver lidt mening.
Måske er dit problem, at du tror det er nødvendigt at formattere
datoen til en strengform: "9 februar 2003". Det kan jeg kun opfordre
til at lade være med - hold så vidt muligt fat i de basale
dato-/tid-værdier.


[1] Ang. Now, så er der ingen grund til at overføre den fra Script til
database. Man kan lige så godt bruge Now-funktionen i databasen:
strSQL = "INSERT INTO tblTabel ([dato1]) VALUES (Now());"

Ofte kan man helt undlade den, men blot sætte feltets default-værdi
til Now i databasen.


Good luck!

--
Jørn Andersen,
Brønshøj

Christian M. Nielsen (06-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 06-02-03 17:08

Tak for forklaringerne.

Jeg har tumlet lidt med det men jeg får en fejl i "date" delen. Jeg ved ikke
hvad der går galt, men så vidt jeg kan se er vædierne korrekte ??

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query
expression '(((Kontaktes =#DateSerial(2003, 2, 6) #) OR ( KontaktesII
=#DateSerial(2003, 2, 6) #))) AND ((Relation ='trs') or (RelationII
='trs'))'.

Min strSQL ser således ud for søgning på dags dato

strSQL = "SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma,
BrugerID FROM tblNewBizz WHERE (((Kontaktes =#"&DateToSql(Date)&"#) OR (
KontaktesII =#"&DateToSql(Date)&"#))) AND ((Relation ='" &
Session("BrugerID") &"') or (RelationII ='" & Session("BrugerID") &"'))
ORDER BY Firma ASC"

Jeg bruger denne funktion til DateToSql:

' -- DateToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") "

End Function
' -- DateToSql slut --

datatypen for de felter i databasen der indeholder datoer er alle af typen
"Dato og klokkeslæt"

Jeg gerne vil undgå at bruge Select-bokse og i stedet for have et formfelt
hvor dato indtates efter devisen dd/mm/yyyy. Når jeg ser på fejlmeddelelsen
som er den samme som ovenstående, så er datoen oversat korrekt, fx giver
29/10/2003 = DateSerial(2003, 10, 29) så jeg vil holde fast i den model
indtil videre, da det er mere overskueligt for brugbarheden.

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



Jørn Andersen (06-02-2003)
Kommentar
Fra : Jørn Andersen


Dato : 06-02-03 17:40

On Thu, 6 Feb 2003 17:07:45 +0100, "Christian M. Nielsen"
<christian@(REMOVE)cmnielsen(DOT)dk> wrote:

>Tak for forklaringerne.
>
>Jeg har tumlet lidt med det men jeg får en fejl i "date" delen. Jeg ved ikke
>hvad der går galt, men så vidt jeg kan se er vædierne korrekte ??
>
>Error Type:
>Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
>[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query
>expression '(((Kontaktes =#DateSerial(2003, 2, 6) #) OR ( KontaktesII
>=#DateSerial(2003, 2, 6) #))) AND ((Relation ='trs') or (RelationII
>='trs'))'.
>
>Min strSQL ser således ud for søgning på dags dato
>
>strSQL = "SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma,
>BrugerID FROM tblNewBizz WHERE (((Kontaktes =#"&DateToSql(Date)&"#) OR (
>KontaktesII =#"&DateToSql(Date)&"#))) AND ((Relation ='" &
>Session("BrugerID") &"') or (RelationII ='" & Session("BrugerID") &"'))
>ORDER BY Firma ASC"

Fjern #-tegnene!

strSQL = "SELECT Relation, RelationII, Kontaktes, kontaktesII, Firma,
BrugerID
FROM tblNewBizz
WHERE (((Kontaktes = " & DateToSql(Date) & ") OR (KontaktesII = " &
DateToSql(Date) & "))) AND ((Relation ='" &
Session("BrugerID") &"') or (RelationII ='" & Session("BrugerID")
&"'))
ORDER BY Firma ASC"

- styr selv linieskiftene ... :)


Good luck!

--
Jørn Andersen,
Brønshøj

Christian M. Nielsen (06-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 06-02-03 18:02

"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:5k354vskp2pt0l6r2es5m6so03qs516ekr@4ax.com...
> Fjern #-tegnene!

TAK, virker perfekt.

Jeg er meget taknemlig for din og andres hjælp til dette. Det har været
lærerigt.

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice




Jens Gyldenkærne Cla~ (02-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-02-03 22:11

Jørn Andersen skrev:

[Funktion til at levere datoer til databaser]
> (Du'r til Access, men vistnok ikke til MSSQL

Det er korrekt - MSSQL har hverken DateSerial eller TimeSerial.

> - som har nogle andre indbyggede funktioner end Access).

I MSSQL kan man benytte funktionen CONVERT, der tager tager tre
parametre - et dataformat, en værdi og en formatkode. Onlinehjælpen
til T-SQL viser mulighederne med CONVERT.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jørn Andersen (31-01-2003)
Kommentar
Fra : Jørn Andersen


Dato : 31-01-03 01:57

On Thu, 30 Jan 2003 20:34:49 +0100, "Christian M. Nielsen"
<christian@(REMOVE)cmnielsen(DOT)dk> wrote:

>Jeg starter min sub på denne måde
>
><% Sub Show()
> Session.LCID = 1030

Hvorfor har du "Session.LCID = 1030" i din Sub i stedet for at have
dne i toppen af siden?
Jeg er ikke sikker på, om det gør en forskel - det undrede mig bare.

--
Jørn Andersen,
Brønshøj

Christian M. Nielsen (31-01-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 31-01-03 06:39


"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:8cij3v8de1vmrgnqj880pge2ljjetbjcpv@4ax.com...
> On Thu, 30 Jan 2003 20:34:49 +0100, "Christian M. Nielsen"
> <christian@(REMOVE)cmnielsen(DOT)dk> wrote:
>
> >Jeg starter min sub på denne måde
> >
> ><% Sub Show()
> > Session.LCID = 1030
>
> Hvorfor har du "Session.LCID = 1030" i din Sub i stedet for at have
> dne i toppen af siden?
> Jeg er ikke sikker på, om det gør en forskel - det undrede mig bare.

Det havde (har) jeg også, men det var for a være 100% sikker på at den kom
med på den side der var problemer med.

Tak for de andre svar, jeg ser på dem når jeg kommer hjem fra arbejde.

God weekend til alle.

--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste