/ 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
Problemer med udtræk
Fra : Belial


Dato : 29-03-05 19:51

Jeg skal hive en række arrangementer ud af databasen, hvis datoen er idag
eller senere. Feltet i databasen er et datofelt. Mit problem er, at SQL
sætningen af en eller anden grund ikke går ind og sorterer på datoen som den
skal. Den viser alle datoer lige meget om de er inden eller efter d.d. Min
kode ser således ud:

strDato = Date()

sql = "SELECT TOP 10 * FROM aktiviteter WHERE dato >= " & strDato & " AND
version = 'da' OR version = 'alle' ORDER BY dato "
Set objRS = Connect.Execute(sql)

SQL sætningen ser således ud når man udskriver den:

SELECT TOP 10 * FROM aktiviteter WHERE dato >= 29-03-2005 AND version = 'da'
OR version = 'alle' ORDER BY dato

og det ser i mine øjne jo rigtigt nok ud. Hvor går den galt for mig?



 
 
Torben Brandt (29-03-2005)
Kommentar
Fra : Torben Brandt


Dato : 29-03-05 21:16

Belial wrote in dk.edb.internet.webdesign.serverside.asp:
> Jeg skal hive en række arrangementer ud af databasen, hvis datoen er idag
> eller senere. Feltet i databasen er et datofelt. Mit problem er, at SQL
> sætningen af en eller anden grund ikke går ind og sorterer på datoen som den
> skal. Den viser alle datoer lige meget om de er inden eller efter d.d. Min
> kode ser således ud:
>
> SELECT TOP 10 * FROM aktiviteter WHERE dato >= 29-03-2005 AND
> version = 'da' OR version = 'alle' ORDER BY dato
>
> og det ser i mine øjne jo rigtigt nok ud. Hvor går den galt for mig?

Nja, problemet er i:
dato >= 29-03-2005
Men 29-03-2005 fortolkes som 29 minus 3 minus 2005.

Prøv at læse her:
<URL:http://www.asp-faq.dk/article/?id=98>

mvh Torben

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Belial (29-03-2005)
Kommentar
Fra : Belial


Dato : 29-03-05 21:30

> Nja, problemet er i:
> dato >= 29-03-2005
> Men 29-03-2005 fortolkes som 29 minus 3 minus 2005.
>
> Prøv at læse her:
> <URL:http://www.asp-faq.dk/article/?id=98>

Jeg har fulgt eksemplet på ovenstående side, men får følgende SQL sætning ud
af det:

SELECT TOP 10 * FROM aktiviteter WHERE dato >= DateSerial(1899, 12, 30) AND
version = 'da' OR version = 'alle' ORDER BY dato

Som du kan se er datoen helt forkert. Hvad kan jeg gøre?



Jens Gyldenkærne Cla~ (29-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 29-03-05 22:12

Belial skrev:

> Jeg har fulgt eksemplet på ovenstående side, men får følgende
> SQL sætning ud af det:
>
> SELECT TOP 10 * FROM aktiviteter WHERE dato >=
> DateSerial(1899, 12, 30) AND version = 'da' OR version =
> 'alle' ORDER BY dato

Hvor kommer datoen "29-03-2005" fra i din (oprindelige) kode?
Hvilken asp-kode bruger du til at frembringe ovenstående sql-kode?

Hvis du blot vil hente poster nyere end dags dato, er der ingen -
gentager *ingen* - grund til at generere datoen i asp. Følgende
sql-sætning opnår netop dette:

   SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date()

Hvis tiden skal medregnes, kan man i stedet bruge

   SELECT TOP 10 * FROM aktiviteter WHERE dato >= Now()

Hvis man skal bruge en specifik dato, kan DateSerial være en god
hjælp. DateSerial sikrer at databasen ikke vælger et andet
datoformat end det man tror man benytter - men det virker kun så
længe man selv er sikker på at de tre parametre funktionen skal
have (år, måned og dag) er angivet korrekt.
--
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

belial (30-03-2005)
Kommentar
Fra : belial


Dato : 30-03-05 08:34

Hov, jeg svarede i går aftes, men svaret er åbenbart ikke kommet frem.

> Hvor kommer datoen "29-03-2005" fra i din (oprindelige) kode?
> Hvilken asp-kode bruger du til at frembringe ovenstående sql-kode?

Den kommer fra VbScripts Date()

>
> Hvis du blot vil hente poster nyere end dags dato, er der ingen -
> gentager *ingen* - grund til at generere datoen i asp. Følgende
> sql-sætning opnår netop dette:
>
>    SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date()
>
> Hvis tiden skal medregnes, kan man i stedet bruge
>
>    SELECT TOP 10 * FROM aktiviteter WHERE dato >= Now()

Det har jeg forsøgt men når jeg udskriver SQL strengen så giver det blot
følgende resultat:

SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date() AND
version = 'da' OR version = 'alle' ORDER BY dato

Jeg forstår ikke hvorfor den ikke erstatter Date() med en faktisk dato?

>
> Hvis man skal bruge en specifik dato, kan DateSerial være en god
> hjælp. DateSerial sikrer at databasen ikke vælger et andet
> datoformat end det man tror man benytter - men det virker kun så
> længe man selv er sikker på at de tre parametre funktionen skal
> have (år, måned og dag) er angivet korrekt.

Jeg har forsøgt mig med DateSerial som du kan se i mit tidligere indlæg.
Det giver en meget mærkelig dato: 1899,30,12. Jeg forstår ikke hvorfor?



Jens Gyldenkærne Cla~ (30-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-03-05 09:53

belial skrev:

> Den kommer fra VbScripts Date()

Tænkte jeg nok. Access har præcis den samme funktion - og det kan
klart anbefales at bruge Access-varianten.


> Det har jeg forsøgt men når jeg udskriver SQL strengen så
> giver det blot følgende resultat:
>
> SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date() AND
> version = 'da' OR version = 'alle' ORDER BY dato

Jep - sådan skal den også se ud. Har du prøvet at køre den?


> Jeg forstår ikke hvorfor den ikke erstatter Date() med en
> faktisk dato?

Der skal netop *ikke* stå en datoværdi i sql-strengen. Sql-strengen
er bare en klump tekst, og hvis du skriver en datoværdi her, er det
op til databasen at fortolke formatet. Men når du skriver en
datofunktion - her Date() - kan databasen ikke tage fejl.

Humlen er at Access sagtens selv kan beregne dags dato - blot ved
at give den funktionen Date()

Prøv fx at køre forespørgslen herunder i Access (evt. via ASP):

   SELECT Date() as dato, Now() as datomedtid


> Jeg har forsøgt mig med DateSerial som du kan se i mit
> tidligere indlæg. Det giver en meget mærkelig dato:
> 1899,30,12. Jeg forstår ikke hvorfor?

Hvordan genererer du parametrene til DateSerial? (det er ikke så
vigtigt i forhold til dit aktuelle problem - brug hellere krudtet
på forespørgslen uden dateserial).


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

Belial (30-03-2005)
Kommentar
Fra : Belial


Dato : 30-03-05 15:42

>> SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date() AND
>> version = 'da' OR version = 'alle' ORDER BY dato
>
> Jep - sådan skal den også se ud. Har du prøvet at køre den?

Ja, og det hjælper desværre intet. Resultaterne bliver udskrevet uden
respekt for at de kun er datoerne fra idag eller senere der skal fremkomme


> Humlen er at Access sagtens selv kan beregne dags dato - blot ved
> at give den funktionen Date()
>
> Prøv fx at køre forespørgslen herunder i Access (evt. via ASP):
>
> SELECT Date() as dato, Now() as datomedtid

Det kan jeg godt se. Det giver jo det resultat man ønsker.

>> Jeg har forsøgt mig med DateSerial som du kan se i mit
>> tidligere indlæg. Det giver en meget mærkelig dato:
>> 1899,30,12. Jeg forstår ikke hvorfor?
>
> Hvordan genererer du parametrene til DateSerial? (det er ikke så
> vigtigt i forhold til dit aktuelle problem - brug hellere krudtet
> på forespørgslen uden dateserial).

Det var fordi det blev anbefalet i et af de tidligere indlæg. Jeg kan dog
godt se at Date() i SQL strengen burde være nemmere. Men resultatet
fremkommer jo desværre stadig ikke som det skal. Har jeg måske lavet en fejl
et andet sted?



Jens Gyldenkærne Cla~ (30-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 30-03-05 21:15

Belial skrev:

>>> SELECT TOP 10 * FROM aktiviteter WHERE dato >= Date() AND
>>> version = 'da' OR version = 'alle' ORDER BY dato

> Resultaterne bliver udskrevet uden respekt for at de kun er
> datoerne fra idag eller senere der skal fremkomme

Du er sikker på at AND og OR binder som du forventer det, ikke?

Der er forskel på

....WHERE (dato >= Date() AND version = 'da') OR (version = 'alle')

- og

....WHERE (dato >= Date()) AND (version = 'da' OR version = 'alle')

(så vidt jeg husker er det den øverste version der anvendes, men
jeg bruger altid selv paranteser for at undgå at komme i tvivl)
--
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

Belial (30-03-2005)
Kommentar
Fra : Belial


Dato : 30-03-05 21:31

> Du er sikker på at AND og OR binder som du forventer det, ikke?

Nej, det har jeg faktisk ikke tænkt på.

> Der er forskel på
>
> ...WHERE (dato >= Date() AND version = 'da') OR (version = 'alle')
>
> - og
>
> ...WHERE (dato >= Date()) AND (version = 'da' OR version = 'alle')

Fantastisk! Jeg forsøgte med ovenstående, og endelig virker det! Tak for
hjælp endnu engang.



Jens Gyldenkærne Cla~ (31-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-03-05 08:46

Belial skrev:

> Fantastisk! Jeg forsøgte med ovenstående, og endelig virker
> det!

Tillykke.

Et lille tip - hvis du skal angive flere valgmuligheder til et felt
(som her hvor version kan være "da" eller "alle"), kan du i Access
benytte IN-operatoren:

   version IN ('da', 'alle')

- svarer præcis til

   (version = 'da' OR version = 'alle')

(incl. paranteserne)

Det kan gøre sætningen lidt lettere at overskue (specielt hvis der
kommer flere end to muligheder).

Hvis det var denne her du endte med:

...WHERE (dato >= Date()) AND (version = 'da' OR version = 'alle')

- kan den derfor også skrives:

...WHERE (dato >= Date()) AND version IN ('da', 'alle')
--
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

Belial (31-03-2005)
Kommentar
Fra : Belial


Dato : 31-03-05 19:47

> Et lille tip - hvis du skal angive flere valgmuligheder til et felt
> (som her hvor version kan være "da" eller "alle"), kan du i Access
> benytte IN-operatoren:

Interessant. Det vidste jeg (heller) ikke Tak for hintet.



Niels Henriksen (29-03-2005)
Kommentar
Fra : Niels Henriksen


Dato : 29-03-05 22:21

"Belial" <666_NOSPAM@esenet.dk> wrote in message
news:4249a3a1$0$23081$edfadb0f@dread15.news.tele.dk...
> Jeg skal hive en række arrangementer ud af databasen, hvis datoen er idag
> eller senere. Feltet i databasen er et datofelt. Mit problem er, at SQL
> sætningen af en eller anden grund ikke går ind og sorterer på datoen som
> den skal. Den viser alle datoer lige meget om de er inden eller efter d.d.
> Min kode ser således ud:

Den måde jeg benytter dato på er at lave den om til et tal der er
formatteret YYYYMMDD. På den måde vil dato altid blive vist rigtigt på mine
sider, da jeg har funktioner der laver det tal om til det ønskede
datoformat. På den måde kan serveren kører med langbortistansk datoformat og
mine sider kan vises med dansk datoformat ;)

--
Niels Henriksen
www.netopcom.dk
Webhosting: 100 MB for 8 kr/mdr incl. moms



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

Månedens bedste
Årets bedste
Sidste års bedste