/ 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
Sammenligne serverens tid med tid fra data~
Fra : Peter Hindsgaul


Dato : 21-11-04 12:51

Hej

Jeg skal lave nogle udskrifter der viser alle poster fra NU til om en halv
time

Indtil videre fumler jeg med dette:

<uddrag>

dim tiden
dim afgang
dim halvtime
<>
tiden = Time()
halvtime = DATEADD("n",30,tiden)
<>
rs.open "Select * From tblChildren ORDER BY afgang_e DESC", cn
afgang = rs.fields("afgang_e")
<>
Response.Write "<tr BGCOLOR='#FFFFFF'><td><BR><strong>
</td><td><BR><strong>Navn &nbsp;" & (tiden) & " " & (halvtime) &
"</strong></td><td><BR><strong>Skal gå kl.</td></tr>"
if (afgang) = (tiden) AND (afgang) < (halvtime) then

<uddrag slut>

Response.Write sætningen er næppe vigtig her, men jeg har taget den med
fordi jeg rent faktisk får både tidspunkt og tidspunkt+½ time udskrevet
korret, det er så til gengæld også den eneste linie jeg får. Selvom der er
poster i databsen, der opfylder kriterierne får jeg ingen hits.

Jeg har på fornemmelsen at det er min syntaks i if-sætningen der ikke
holder, at det måske er størrelser, der er usammenlignelige.
Datatypen i feltet i databasen (Access) er date/time

Håber der er en, der har en god ide.


--
Venlig hilsen

Peter Hindsgaul



 
 
Jens Gyldenkærne Cla~ (21-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-11-04 22:15

Peter Hindsgaul skrev:

> tiden = Time()
> halvtime = DATEADD("n",30,tiden)

Du vil slippe for _mange_ problemer hvis du lader databasen beregne
den halve time i stedet for at gøre det i asp.

> rs.open "Select * From tblChildren ORDER BY afgang_e DESC",

Hvis du bruger Access, kan du bruge dateAdd-funktionen der:

SELECT * FROM tblChildren
WHERE afgang_e BETWEEN NOW() AND DATEADD('n', 30, NOW())
ORDER BY afgang_e

Bemærk at der ikke skal bruges strengsammensætning eller andet for
at lave sql-sætningen - den skal sendes til databasen præcis som
den står (linjeskiftene kan dog udelades).

Så kan du bare udskrive alle poster der kommer med - for
udvælgelsen foregår direkte i databasen.
--
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

Peter Hindsgaul (21-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 21-11-04 22:37


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns95A8E25152864jcdmfdk@gyrosmod.cybercity.dk...

1000 tak for svaret.

> Bemærk at der ikke skal bruges strengsammensætning eller andet for
> at lave sql-sætningen - den skal sendes til databasen præcis som
> den står (linjeskiftene kan dog udelades).

Når jeg sætter linien ind får jeg følgende fejl:

Expected 'Case'

/show_hent_kl.asp, line 27

SELECT * FROM tblChildren WHERE afgang_e BETWEEN NOW() AND DATEADD('n', 30,
NOW()) ORDER BY afgang_e
"Select-linien" er linie 27Venlig hilsenPeter Hindsgaul



Jens Gyldenkærne Cla~ (21-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-11-04 23:19

Peter Hindsgaul skrev:

> Når jeg sætter linien ind får jeg følgende fejl:
>
> Expected 'Case'

Sql-sætningen skal stadig "pakkes ind" i en strengvariabel så den
kan sendes til databasen.

Du skal altså have:

strSQL = "SELECT * FROM ......" (resten af sqlsætningen)

(lav det bare på én linje - men tjek at der stadig er mellemrum når
du sletter et linjeskift)
--
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

Peter Hindsgaul (22-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 22-11-04 00:12

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns95A8ED2639DF9jcdmfdk@gyrosmod.cybercity.dk...

> Du skal altså have:
>
> strSQL = "SELECT * FROM ......" (resten af sqlsætningen)

Tak fordi du gider blive ved.

På plussiden er, at jeg ikke får nogen fejl.
På minusisden er, at jeg heller ikke får de poster, der opfylder
kriterierne.

Jeg har nu følgende:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "Provider=Microsoft.JET.OLEDB.4.0; Data Source =
D:\Inetpub\dbroot\db.mdb"
Conn.Open DSN
dim conn
dim DSN
dim rs
dim strSQL

strSQL = "SELECT * FROM tblChildren WHERE afgang_e BETWEEN NOW() AND
DATEADD('n', 30, NOW()) ORDER BY afgang_e"

set rs = Conn.Execute(strSQL)

Fjerner jeg fra WHERE og frem, får jeg en fin liste med alle posterne, så
forbindelsen til databasen er vist god nok.
Har det nogen betydning hvilket format jeg har for date/type i databasen?
(selv mener jeg nej)

Venlig hilsen
Peter Hindsgaul



Jens Gyldenkærne Cla~ (22-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-11-04 13:05

Peter Hindsgaul skrev:

> strSQL = "SELECT * FROM tblChildren WHERE afgang_e BETWEEN NOW() AND
> DATEADD('n', 30, NOW()) ORDER BY afgang_e"

Hm - den ser umiddelbart fin ud. Jeg kan ikke huske om første parameter
til DateAdd skal være uden anførselstegn, med enkelte eller dobbelte
anførselstegn.

Prøv evt. DateAdd("n", 30, Now()) hhv. DateAdd(n, 30, Now()) (husk at
dobbelte anførselstegn skal escapes i asp). Så vidt jeg kan teste mig
til her, skulle det dog virke med både " og ' (men ikke uden
anførselstegn).

Du skal selvfølgelig have nogle poster der ligger inden for den næste
halve time - og du skal huske at datoen også tæller med. Måske er det
dét der er problemet.

Hvis du skal se bort fra datoen, skal vi lave en lidt anden gymnastik.

--
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

Peter Hindsgaul (22-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 22-11-04 13:58

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:6w52gttzo1sy$.dlg@jcdmfdk.invalid...

> Hm - den ser umiddelbart fin ud. Jeg kan ikke huske om første parameter
> til DateAdd skal være uden anførselstegn, med enkelte eller dobbelte
> anførselstegn.

Enkelte anførselstegn og 2 x dobbelte (er det ikke at escape?) giver ingen
fejl, men heller ingen poster.

> Du skal selvfølgelig have nogle poster der ligger inden for den næste
> halve time - og du skal huske at datoen også tæller med. Måske er det
> dét der er problemet.

Jeg har poster der ligger inden for tidsrummet. I en totaludskrift uden
kriterier optræder de godt nok også med sekunder, men det må jeg se på
senere.
I databasen optræder kun et tidspunkt, og selvom jeg skifter til langt
datoformat, så det kan sagtens tænkes at det er her hunden ligger begravet.

> Hvis du skal se bort fra datoen, skal vi lave en lidt anden gymnastik.

Det tror jeg jeg skal. det handler om at udskrive en liste med, hvornår
bestemte personer skal adviseres. Tidspunktet er skrevet ind i databasen
lang tid i forvejen, og datoen er ikke relevant, da det er hver dag
adviseringen skal ske.

Jeg har i desperation overvejet at lave to tabeller med tal i stedet for en
med dato/tid, og så en rutine med, hvis minutter bliver mere end 60 skal der
trækkes 60 fra og lægges 1 til timerne, men det er alt andet lige end noget
bøvlet fremgangsmåde, der givetvis heller ikke er den hurtigste. Så
desperation er vist ikke nok til, at jeg kaster mig over den løsning, vi
skal helt op i vild og uhæmmet desperation

Igen 1000 tak fordi du gider hjælpe.

Venlig hilsen
Peter Hindsgaul



Jens Gyldenkærne Cla~ (22-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-11-04 14:32

Peter Hindsgaul skrev:

> Jeg har poster der ligger inden for tidsrummet. I en totaludskrift uden
> kriterier optræder de godt nok også med sekunder, men det må jeg se på
> senere.

Prøv at lade databasen vise hvor mange minutter der er fra nu til
afgangstidspunktet:

   SELECT afgang_e, DATEDIFF('n', Now(), afgang_e) as minutdiff
   FROM tblChildren

Så kan du se hvor mange minutter der ifølge databasen er mellem nu og de
datoer der er i tabellen.


>> Hvis du skal se bort fra datoen, skal vi lave en lidt anden gymnastik.
>
> Det tror jeg jeg skal. det handler om at udskrive en liste med, hvornår
> bestemte personer skal adviseres. Tidspunktet er skrevet ind i databasen
> lang tid i forvejen, og datoen er ikke relevant, da det er hver dag
> adviseringen skal ske.

O.k. - det forklarer en del.

Prøv at bruge følgende:

WHERE (((DateAdd('d',DateDiff('d',[afgang_e],Now()),[afgang_e]))
Between Now() And DateAdd('n',30,Now())));

Den ser ud til at virke her.

Proceduren er at man finder forskellen i dage mellem afgang_e og nu:
DateDiff('d',[afgang_e],Now()). Det lægger man så til afgang_e
(DateAdd('d', DateDiff...) og får dermed tidspunktet i dag. Herefter kan
det så sammenlignes med Now og DateAdd('n',30,Now()).


> Jeg har i desperation overvejet at lave to tabeller med tal i stedet for en
> med dato/tid, og så en rutine med, hvis minutter bliver mere end 60 skal der
> trækkes 60 fra og lægges 1 til timerne, men det er alt andet lige end noget
> bøvlet fremgangsmåde,

Ja - specielt hvis man også skal tage højde for specialtilfælde omkring
midnat.

--
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

Peter Hindsgaul (22-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 22-11-04 15:15

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:4prbrkdrkkwg.dlg@jcdmfdk.invalid...

> Prøv at lade databasen vise hvor mange minutter der er fra nu til
> afgangstidspunktet:
>
> SELECT afgang_e, DATEDIFF('n', Now(), afgang_e) as minutdiff
> FROM tblChildren
>
> Så kan du se hvor mange minutter der ifølge databasen er mellem nu og de
> datoer der er i tabellen.

Det forstod jeg ikke. Jeg prøvede med

dim minutdff
strSQL = "din streng"

og satte (datediff) i udskriftsdelen af filen, men den viste ikke nogen
forskelle

>
> WHERE (((DateAdd('d',DateDiff('d',[afgang_e],Now()),[afgang_e]))
> Between Now() And DateAdd('n',30,Now())));

strSQL = "SELECT * FROM tblChildren WHERE
(((DateAdd(""d"",DateDiff(""d"",[afgang_e],Now()),[afgang_e])) Between Now()
And DateAdd(""n"",30,Now())));"

set rs = Conn.Execute(strSQL)

Sådan her? (altså en sammenhænfende strSQL-linie og en set rs=)
Jeg har også prøvet med enkelt anførselstegn, resultatet var det samme

> Den ser ud til at virke her.

Det giver denne fejl:
Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression.
/show_hent_kl.asp, line 27


linie 27 er set rs-linien

> Ja - specielt hvis man også skal tage højde for specialtilfælde omkring
> midnat.

Så bliver det i givet fald en sag for de sociale myndigheder. Det handler om
hvornår de forskellige børn skal sendes hjem fra en SFO

Venlig hilsen
Peter Hindsgaul



Jens Gyldenkærne Cla~ (22-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-11-04 23:00

Peter Hindsgaul skrev:

>> SELECT afgang_e, DATEDIFF('n', Now(), afgang_e) as minutdiff
>> FROM tblChildren

> Det forstod jeg ikke. Jeg prøvede med
>
> dim minutdff

Du har ikke brug for en minutdiff-variabel. Når jeg skriver "as
minutdiff" inde i sql-sætningen, så er det for at få en reference
til det beregnede felt (DATEDIFF...).

Det kan du udskrive med rs("minutdiff")


> Det giver denne fejl:
> Microsoft JET Database Engine error '80040e07'
> Data type mismatch in criteria expression.
> /show_hent_kl.asp, line 27

Prøv at udskrive sql-sætningen
(se hvordan her: <http://asp-faq.dk/article/?id=41>)
--
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

Peter Hindsgaul (23-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 23-11-04 00:27


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns95A9EA0507473jcdmfdk@gyrosmod.cybercity.dk...
>
> Det kan du udskrive med rs("minutdiff")

Så er jeg vist med igen.

Det ser mærkeligt ud:

00:12:00 giver -55172149
00:25:00 giver -55172136
23-11-2004 00:20:00 giver 10

Ændrer jeg til kort datoformat i databasen er der ingen ændring
15:00:00 giver -55171273

Det er lige i omegnen af 100 år, tror jeg ?

>
>> Det giver denne fejl:
>> Microsoft JET Database Engine error '80040e07'
>> Data type mismatch in criteria expression.
>> /show_hent_kl.asp, line 27
>
> Prøv at udskrive sql-sætningen
Hvis jeg har forstået din artikel rigtigt og udskiftet "qr" med "strSQL" ser
den sådan ud:

SQL-sætning bliver: SELECT * FROM tblChildren WHERE
(((DateAdd("d",DateDiff("d",[afgang_e],Now()),[afgang_e])) Between Now() And
DateAdd("n",30,Now())));

Venlig hilsen
Peter Hindsgaul



Jens Gyldenkærne Cla~ (23-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-11-04 10:56

Peter Hindsgaul skrev:

> Det ser mærkeligt ud:
>
> 00:12:00 giver -55172149
> 00:25:00 giver -55172136
> 23-11-2004 00:20:00 giver 10

Det ser godt nok mærkeligt ud.

Prøv at tjekke datoen på denne måde:

SELECT afgang_e, day(afgang_e) as dd, month(afgang_e) as mm,
year(afgang_e) as yyyy FROM tblChildren


> Det er lige i omegnen af 100 år, tror jeg ?

Ja - ca. 104 efter min bordregner.

SQL-sætningen ser rigtig nok ud, men måske fejler DateAdd ved så store
værdier som dem der kommer ud fra DateDiff nu. Hjælper det hvis du
retter afgang_e til en dato i dette århundrede? (prøv evt. bare med et
par poster)

--
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

Peter Hindsgaul (23-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 23-11-04 13:18

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:1lhx1ss9p8c9i$.dlg@jcdmfdk.invalid...
>
> Prøv at tjekke datoen på denne måde:
>
> SELECT afgang_e, day(afgang_e) as dd, month(afgang_e) as mm,
> year(afgang_e) as yyyy FROM tblChildren

For de tidspunkter, hvor jeg også har skrevet en dato er det den dato, der
vises

11/19/2004 5:30:00 PM -> 19 11 2004

For de tidspunkter hvor jeg ikke har skrevet dato bliver datoen sat til
30/12-1899

12:12:00 AM -> 30 12 1899

>
> Ja - ca. 104 efter min bordregner.

Det passer jo nogenlunde med 30. dec. 1899
Jeg forstår så ikke hvorfor der er kortere tid tilbage til den dag fra kl.
00:25 end der er fra kl. 00:12 jvf:
00:12:00 giver -55172149
00:25:00 giver -55172136
fra tidligere, men det har muligvis ikke noget med det at gøre?

> SQL-sætningen ser rigtig nok ud, men måske fejler DateAdd ved så store
> værdier som dem der kommer ud fra DateDiff nu. Hjælper det hvis du
> retter afgang_e til en dato i dette århundrede? (prøv evt. bare med et
> par poster)

Mener du som jeg gjorde længere oppe med d. 19/11-2004?

Venlig hilsen
Peter Hindsgaul



Jens Gyldenkærne Cla~ (23-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-11-04 13:48

Peter Hindsgaul skrev:

> For de tidspunkter hvor jeg ikke har skrevet dato bliver datoen sat til
> 30/12-1899

Det sker også her hvis jeg indtaster en tid uden at indtaste dato. Men
dateadd-funktionen fungerer alligevel fint.

Jeg kom dog lige på en anden metode:

SELECT * FROM tblChildren
WHERE
(Minute([afgang_e])+60*Hour([afgang_e]))-(Minute(Now())+60*Hour(Now())))
Between 0 And 30

Den omregner afgang_e og now() til et antal minutter (målt fra dags
dato), beregner differencen og tjekker at den er mellem 0 og 30.

--
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

Peter Hindsgaul (23-11-2004)
Kommentar
Fra : Peter Hindsgaul


Dato : 23-11-04 14:14

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:4o3bqia1gbyk$.dlg@jcdmfdk.invalid...

> Jeg kom dog lige på en anden metode:
>
> SELECT * FROM tblChildren
> WHERE
> (Minute([afgang_e])+60*Hour([afgang_e]))-(Minute(Now())+60*Hour(Now())))
> Between 0 And 30

YES

bortset fra en højreparantes for meget I *Hour(Now()))) var det lige den der
skulle til.

Mange mange tusinde tak for hjælpen

Venlig hilsen
Peter Hindsgaul



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste