Avatar billede lightbrain Nybegynder
23. oktober 2002 - 18:30 Der er 30 kommentarer og
2 løsninger

Simpel listning af datoer

Hej

Jeg har brug for et script, som tager værdien fra hvert objekt (kolonne "publishdato") og lister dem således:

29-09-2002, 01-10-2002, 02-10-2002, 05-10-2002, 14-10-2002, 24-11-2002

Hvert objekt kan kun have en publishdato, men der kan godt findes objekter, som ikke har angivet en publishdato, og disse skal scriptet bare springe over.
Avatar billede thomas_regin Nybegynder
23. oktober 2002 - 20:02 #1
Hvis jeg har forstået dit problem rigtigt så skal du gøre således:

do while not rs.EOF
    if isDate(rs("PublishingDato")) then
        Response.Write rs("PublishingDato") & ","
    End If
rs.MoveNext
Loop

Mvh,

Thomas Regin
Avatar billede lightbrain Nybegynder
23. oktober 2002 - 20:04 #2
Tæt på, datoerne skal smides ind i en variabel, som senere skal bruges. Vi du udbygge koden med omtalte variabel?
Avatar billede lightbrain Nybegynder
23. oktober 2002 - 20:06 #3
Og der skal ikke (når du udbygger koden) være noget komma efter det sidste dato. :-)
Avatar billede thomas_regin Nybegynder
23. oktober 2002 - 20:08 #4
Jep!

do while not rs.EOF
    if isDate(rs("PublishingDato")) then
        myDates = myDates & rs("PublishingDato") & ","
    End If
rs.MoveNext
Loop

Udskriv dem med Response.Write myDates

Når du så opdager, at der er et komma for meget i slutningen, så kan du istedet bruge:

Response.Write left(myDates,len(myDates)-1)

Mvh,

Thomas Regin.
Avatar billede thomas_regin Nybegynder
23. oktober 2002 - 20:09 #5
Haha.. To sjæle én tanke! ;)
Avatar billede lightbrain Nybegynder
25. oktober 2002 - 16:26 #6
Super... men du har lige glemt - eller også har jeg glemt at understege det - at datoerne skal listes, altså så de datoer som kommer først i kalenderen også kommer først i strengen.

(Datoerne er nemlig ikke listet i forvejen i databasen)
Avatar billede thomas_regin Nybegynder
26. oktober 2002 - 10:39 #7
Okay!.. Jeg formoder du mener sorteret, når du siger listet? I sÅ fald burde du kunne gøre det ved at sætte en ORDER BY ind i din SQL-sætning:

strSQL = "Select * from myTbl order by dates"

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 11:53 #8
Ja, sortering... det er bare mig, der ikke er særlig præcis.

Desværre siger den "No value given for one or more required parameters." ved eksekveringen af SQL-sætningen.

<%
    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
    strSQL = "Select * from search order by dates"
    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
        if isDate(rs("datoPublikation")) then
            myDates = myDates & rs("datoPublikation") & ","
        End If
    rs.MoveNext
    Loop
    myDates = left(myDates,len(myDates)-1)
%>
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 12:01 #9
Ups, jeg lavede en lille skrivefejl, men fejl-meddelelsen er stadig den samme.

<%
    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
    strSQL = "Select * from search order by dates"
    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
        if isDate(rs("datopublish")) then
            myDates = myDates & rs("datopublish") & ","
        End If
    rs.MoveNext
    Loop
    myDates = left(myDates,len(myDates)-1)
%>
Avatar billede thomas_regin Nybegynder
26. oktober 2002 - 12:06 #10
Hehe.. Sorry.. Jeg har vist heller ikke udtrykt mig specifikt nok! Når du skal sortere på datoer, så skal du ikke skrive ORDER BY dates, men ORDER BY DIT_DATO_FELT..

Ergo skal sætningen, i dit tilfælde se således ud:

strSQL = "Select * from search order by datopublish"

Hvis du så finder ud af, at den sortere den forkerte vej, altså har sidste først, så kan du skrive sådan her:

strSQL = "Select * from search order by datopublish DESC"

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 18:12 #11
Hov, scriptet tager ikke højde for, at sorteringen skal starte fra dags dato (og ikke fra den dato, hvor jeg startede med at fylde objekter i databasen). Med andre ord så skal scriptet lave en sorteret liste af datoer højere end dags dato.

Det var vidst min fejl, at jeg ikke oplyste det - jeg smider lige nogle flere points oveni. :)
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 18:19 #12
Lille ændring:
Med andre ord så skal scriptet lave en sorteret liste af datoer højere end ELLER LIG MED dags dato.... >=
Avatar billede thomas_regin Nybegynder
26. oktober 2002 - 18:30 #13
Okay!.. Så prøver vi igen! ;)

strSQL = "Select * from search where (datopublish >= " & now() & ") order by datopublish DESC"

Hvis den ikke virker, så prøv denne:

strSQL = "Select * from search where (datopublish >= { fn NOW() })ordery by datopublish DESC"

Mvh,

Thomas Regin.
Avatar billede thomas_regin Nybegynder
26. oktober 2002 - 18:31 #14
Ups.. stavefejl i anden "order by".. Der skal naturligvis ikke være et "y" i "ordery"! ;)
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 19:32 #15
Den siger "Malformed GUID" til begge - f.eks.:

Malformed GUID. in query expression '(datopublish >= { fn NOW() })'.
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 19:36 #16
Den siger ingen fejl ved:
strSQL = "Select * from search where (datopublish >= " & date() & ") order by datopublish"

Men omvendt fyldes der intet ind i "myDates"
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 19:39 #17
Vent lige lidt, det kan også være min fejl.
Avatar billede lightbrain Nybegynder
26. oktober 2002 - 20:15 #18
Jeg har forsøgt mig lidt frem og erstattet Date() med Now() - hvilket fik det til at virke - og slettet DESC, fordi datoerne listes forkert, dvs. med de støreste værdier først. Men jeg mangler lige:

1) at få tilføjet en begrænsning på de sortede datoer, så det kun er de datoerne, som ligger inden for de 60 næste dage, der listes:

2) Yderemere, skal det også lige tilføjes i koden, at en dato kun må listes en gang, så følgende undgåes - f.eks.:

29-09-2002, 01-10-2002, 01-10-2002, 02-10-2002

<%
    Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
    strSQL = "Select * from search where (datopublish >= " & Date() & ") order by datopublish"
    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
        if isDate(rs("datopublish")) then
            myDates = myDates & rs("datopublish") & ","
        End If
    rs.MoveNext
    Loop
    myDates = left(myDates,len(myDates)-1)
    response.write "*** " & myDates
%>

Jeg forhøjer lige pointene igen :-)
Avatar billede thomas_regin Nybegynder
27. oktober 2002 - 11:43 #19
Okay!.. Så forsøg dig med denne sql-sætning:

strSQL = "Select distinct datopublish from search where (datopublish between " & date() & " and " & date() + 60 & ") order by datopublish"

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 11:49 #20
myDates er tom - der bliver ingen datoer lagt ind i den.
Avatar billede thomas_regin Nybegynder
27. oktober 2002 - 12:26 #21
Okay!.. Så prøv at skrive strSQL med disse to linier:

Response.Write strSQL
Response.End

Og så skriv strengen ud her, så jeg kan se, om der sker noget forkert!

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 12:30 #22
Select distinct datopublish from search where (datopublish between 27-10-2002 and 26-12-2002) order by datopublish
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 12:34 #23
Den burdte have udskrevet datoerne 28-10-2002, 29-10-2002, 30-10-2002 og 31-10-2002, for de ligger i kolonnen publishdato. Jeg mener også, at disse datoer faktisk blev udskrevet i tidligere eksempler (dog sammen med en masse andre datoer, som var irrelevante).
Avatar billede thomas_regin Nybegynder
27. oktober 2002 - 12:57 #24
Nej, den skriver det faktisk fuldstændig som det skal være!.. Den skal jo vælge alle datoerne der findes inden for perioden 27-10-2002 til og med 26-12-2002. Altså 60 dage.

Prøv at smide nogle "pinger" ind i din SQL..

strSQL = "Select distinct datopublish from search where (datopublish between '" & date() & "' and '" & date() + 60 & "') order by datopublish"

Fjern Response.Write strSQL og Response.End og prøv igen!..

Hvis det ikke virker, er det sandsynligvis din database, der ikke genkender dato-formatet.

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 13:01 #25
>Prøv at smide nogle "pinger" ind i din SQL..
Hvad er det... jeg er ikke så rutineret endnu :-)
Avatar billede thomas_regin Nybegynder
27. oktober 2002 - 13:04 #26
Hehe.. Det er okay! :)

Pinger er bare den nørdede udviklers måde at sige "Apostroffer"! Hvis du lægger mærke til den SQL-streng jeg skrev ovenover, så er der apostroffer rundt om begge "date()" metoderne. Altså '" & date() & "'.

Mvh,

Thomas.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 13:14 #27
Det er lige meget, om jeg skriver den ene eller det andet, så siger den:
Data type mismatch in criteria expression.

1) strSQL = "Select distinct datopublish from search where (datopublish between '" & date() & "' and '" & date() + 60 & "') order by datopublish"
2)strSQL = "Select distinct datopublish from search where (datopublish between " & date() & " and '" & date() + 60 & "') order by datopublish"
3)strSQL = "Select distinct datopublish from search where (datopublish between '" & date() & "' and " & date() + 60 & ") order by datopublish"

Jeg bruger for resten Access.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 14:01 #28
Giver vi op? Skal jeg oprette en nyt spørgsmål og lade andre komme til?
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 14:15 #29
Jeg lukker spørgsmået her - og takker mange for hjælpen. :-)
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 14:23 #30
Du skal være meget velkommen til at deltage på http://www.eksperten.dk/spm/275785 :-)
Avatar billede thomas_regin Nybegynder
27. oktober 2002 - 16:31 #31
Nej, jeg giver slet ikke op.. Men jeg var desværre lige nødt til at hoppe ud i et par timer!.. Havde egentlig tænkt mig, at du skulle sende databasen og pågældende fil til mig - så kunne jeg ha' lavet det i løbet af 2 minutter! ;)

Men tak for pointene alligevel! ;)

Mvh,

Thomas Regin.
Avatar billede lightbrain Nybegynder
27. oktober 2002 - 16:33 #32
Super - men jeg tror, at der er en, som har svaret rigtigt i http://www.eksperten.dk/spm/275785

Jeg har ikke prøvet det endnu, men det lyder til at være rigtigt. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester