Avatar billede rille101 Nybegynder
14. september 2005 - 14:38 Der er 29 kommentarer og
1 løsning

Kalender for en måned ad gangen. Paging springer en måned

Jeg har en underholdningsskalender, der vises på min side via en repeat region.
Jeg vil gerne have min repeat til at vise posterne for en måned ad gangen, og paging funktionen skulle gerne springe til næste/forrige måned.
Min SQL ser lige nu således ud:

SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse
FROM underholdningskalender, musikere
WHERE underholdningskalender.Solist = musikere.navn AND Date() <= Dato
ORDER BY Dato

Kan nogen hjælpe med det?
Avatar billede softspot Forsker
14. september 2005 - 16:05 #1
Det må være noget med at benytte between til at udvælge data for en måned. Noget i denne stil:

firstOfMonth = Year(Now()) & "-" & Month(Now()) & "-01"
lastOfMonth = Year(Now()) & "-" & Month(Now()) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, Now())))

SQL = "SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"AND Dato BETWEEN " & firstOfMonth & " AND " & lastOfMonth & " " & _
"ORDER BY Dato"
Avatar billede softspot Forsker
14. september 2005 - 16:11 #2
Hmm... du skal nok bruge disse datoberegninger i stedet:

firstOfMonth = Year(Now()) & "-" & Month(Now()) & "-01"
lastOfMonth = Year(Now()) & "-" & Month(Now()) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))
Avatar billede softspot Forsker
14. september 2005 - 16:12 #3
...og hvis din SQL ikke fungerer pga. datoformatet kan du prøve denne version:

SQL = "SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"AND Dato BETWEEN #" & firstOfMonth & "# AND #" & lastOfMonth & "# " & _
"ORDER BY Dato"
Avatar billede softspot Forsker
14. september 2005 - 16:18 #4
Now() skal naturligvis udskiftes med en dato fra den måned som er valgt i kalenderen...
Avatar billede rille101 Nybegynder
14. september 2005 - 17:26 #5
Hej
Jeg har prøvet at indsætte SQL'en fra 16:12 og strengen fra 16:11

Jeg forstår dog ikke helt det med now() der skal skiftes ud...

Hvordan vil det foregå, og kan jeg manuelt skrive noget deri for at teste om det virker?

Har lige prøvet at indsætte hhv 2005 og 10, men får denne fejl:

fejl '80020009'
Undtagelse opstod.

Når jeg forsøger at trække data ud med:
<%response.write Cstr(RSunderholdning("tillaeg"))%>
Avatar billede softspot Forsker
14. september 2005 - 17:32 #6
Prøv at vise lidt mere kode, for det lyder til at den ikke finder noget...
Avatar billede softspot Forsker
14. september 2005 - 17:56 #7
Ang. det at udskifte now() med en dato fra den måned kalenderen viser, så antog jeg at du havde en månedskalender som du brugte til at skifte mellem de enkelte måneder. Den skulle så gerne have en eller anden indikation af hvilken måned/dato der aktuelt er valgt. Denne kan du så bruge (i stedet for now()) til at lave din forspørgsel ud fra...

Det er måske en misforståelse at den kalender findes?
Avatar billede rille101 Nybegynder
14. september 2005 - 18:09 #8
OK det var måske lidt misvisende at fortælle om en kalender.
Den kalender jeg mente er bare den tabel med selve kalender indholdet i.

Det er meningen at en repeat region, skal liste indholdet fra tabellen op.
Det er selvfølgelig ikke noget problem i sig selv.

Problemet er at lave en repeat, der nøjes med at liste alle poster op hvor dato indeholder en bestemt måned (f.eks. oktober), istedet for f.eks. 10 poster pr. side.

Hvor man så normalt ville hare en paging funktion der siger "vis næste 10" skal min paging sige "vis næste måned" og så vise de poster der indeholder November.

Datofeltet i min tabel er af typen Dato.

Her er lidt kode fra min side...

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/connBallumhus.asp" -->
<%
              function firstletter(str)
  firstletter=ucase(left(str,1))&right(str,len(str)-1)
end function
           
firstOfMonth = Year(2005) & "-" & Month(10) & "-01"
lastOfMonth = Year(2005) & "-" & Month(11) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))

Dim RSunderholdning
Dim RSunderholdning_numRows

Set RSunderholdning = Server.CreateObject("ADODB.Recordset")
RSunderholdning.ActiveConnection = MM_connBallumhus_STRING
RSunderholdning.Source = "SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"AND Dato BETWEEN #" & firstOfMonth & "# AND #" & lastOfMonth & "# " & _
"ORDER BY Dato"
RSunderholdning.CursorType = 0
RSunderholdning.CursorLocation = 2
RSunderholdning.LockType = 1
RSunderholdning.Open()

RSunderholdning_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 10
Repeat1__index = 0
RSunderholdning_numRows = RSunderholdning_numRows + Repeat1__numRows
%>



I min Body har jeg bl.a.



<table width="600"  border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td height="50" valign="top"><img src="images/overskrifter/underholdning.jpg" width="323" height="33"><%response.write Cstr(RSunderholdning("tillaeg"))%></td>
        </tr>
        <tr>
          <td><%
While ((Repeat1__numRows <> 0) AND (NOT RSunderholdning.EOF))
%>
            <table width="600"  border="0" cellspacing="0" cellpadding="0">
              <tr>
                  <td width="35%" height="100" valign="middle"><div align="center"><img src="<%=(RSunderholdning.Fields.Item("Billede").Value)%>"></div></td>
                  <td width="65%">
                 
                      <div align="left"></div>                      <table width="72%"  border="0" cellspacing="0" cellpadding="0">
                          <tr>
                            <td><div align="center"><span class="style30"><%=Firstletter(WeekdayName(DatePart("W", RSunderholdning("dato"), 1, vbProperCase)))

%> d. <%=(RSunderholdning.Fields.Item("Dato").Value)%></span> </div></td>
                          </tr>
                          <tr>
                            <td><div align="center"><span class="style32"><%=(RSunderholdning.Fields.Item("Navn").Value)%></span></div></td>
                          </tr>
                          <tr>
                            <td><div align="center" class="style32">
                                <%if not isnull(RSunderholdning.Fields.Item("Orkester").Value) then%>
&</div></td>
                          </tr>
                          <tr>
                            <td><div align="center"><span class="style32"><%=(RSunderholdning.Fields.Item("Orkester").Value)%></span>
                                <%end if%>
                            </div></td>
                          </tr>
                          <tr>
                            <td height="20" valign="bottom"><div align="center">Till&aelig;g: <%=(RSunderholdning.Fields.Item("Tillaeg").Value)%></div></td>
                          </tr>
                                            </table></td>
              </tr>
              <tr>
                <td colspan="2" valign="top"><hr size="1"></td>
                </tr>
            </table>
            <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  RSunderholdning.MoveNext()
Wend
%>
            <p class="style7">&nbsp;</p>
            </td>
        </tr>
      </table>
Avatar billede softspot Forsker
14. september 2005 - 18:32 #9
Mhp. test af SQL, så kan du lige ændre (eller udkommentere) flg. linier:

firstOfMonth = Year(2005) & "-" & Month(10) & "-01"
lastOfMonth = Year(2005) & "-" & Month(11) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))

til:

firstOfMonth = "2005-10-01"
lastOfMonth = "2005-10-30"
Avatar billede rille101 Nybegynder
15. september 2005 - 13:55 #10
Ja nu får jeg positive udskrifter.

firstOfMonth = "2005-10-01"
lastOfMonth = "2005-10-30"

Dim RSunderholdning
Dim RSunderholdning_numRows

Set RSunderholdning = Server.CreateObject("ADODB.Recordset")
RSunderholdning.ActiveConnection = MM_connBallumhus_STRING
RSunderholdning.Source = "SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"AND Dato BETWEEN #" & firstOfMonth & "# AND #" & lastOfMonth & "# " & _
"ORDER BY Dato"
RSunderholdning.CursorType = 0
RSunderholdning.CursorLocation = 2
RSunderholdning.LockType = 1
RSunderholdning.Open()

RSunderholdning_numRows = 0

er hvad jeg har gjort brug af lige nu.

Hvordan laver man så en paging funktion der fodrer

firstOfMonth =
lastOfMonth =

Kan man sørge for at defaultværdien er "denne måned"?
Avatar billede softspot Forsker
15. september 2005 - 14:08 #11
Du kan lægge år og måned i querystring og så benytte denne kode til at fastsætte first- og lastOfMonth:

if not isempty(request.querystring("month")) and request.querystring("month") <> "" then
  sdt = request.querystring("month") & "-01"
  firstOfMonth = Year(sdt) & "-" & Month(sdt) & "-01"
else
  firstOfMonth = Year(Now()) & "-" & Month(Now()) & "-01"
end if
lastOfMonth = Year(firstOfMonth) & "-" & Month(firstOfMonth) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))


Din side kan så kaldes med parameteren month=yyyy-mm, f.eks.

side.asp?month=2005-09

for at vise september
Avatar billede rille101 Nybegynder
20. september 2005 - 13:58 #12
Jeg kan følge med, noget af vejen.

"if not isempty....." viser ikke noget hvis jeg i adressebaren bare skriver underholdning.asp
Men hvis jeg skriver underholdning.asp?2005-10 viser den rigtig nok alle records for oktober.

Jeg havde tænkt mig at pagingfunktionen skulle se nogenlunde sådan ud:

Okt    Nov    Dec    Jan    Feb
    <<Forrige    Næste>>

Hvor Dec linker til underholdning.asp?month=2005-12
Mens forrige og næste selvfølgelig linker til forrige og næste måned.

Og hvor kun de måneder vises, hvor der rent faktisk foregår noget underholdning, kan man det?
Vil nemlig gerne undgå at skulle opdatere pagingen hver måned.
Avatar billede softspot Forsker
20. september 2005 - 14:30 #13
Du kan, når du skal opbygge månedslisten, evt. benytte flg. SQL:

SQL = "SELECT DISTINCT Format(Dato,'yyyy-mm') AS ActiveMonths " & _
", Format(Dato,'mmm') AS MonthName " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"ORDER BY Format(Dato,'yyyy-mm')"

Jeg kan ikke lige gennemskue hvor hvilke felter ligger, så jeg har bibeholdt begge tabellerne i forespørgslen, men du kan evt. fjerne den ene alt afhængig af om du kan bestemme de aktive måneder ud fra en af tabellerne alene.

Det der kommer ud af denne forespørgsel, er en liste af måneder i formatet yyyy-mm (altså 2005-01, 2005-02 osv.), samt de tilhørende månedsnavne i formatet mmm (altså apr, maj, jun, jul osv.). Så burde det være en smal sag at opbygge listen med måneder som links...
Avatar billede rille101 Nybegynder
22. september 2005 - 22:43 #14
Ok. Har nu lavet dette recordset og får udskrevet dataerne til navigationsbaren således.

<%
Dim RSpaging
Dim RSpaging_numRows

Set RSpaging = Server.CreateObject("ADODB.Recordset")
RSpaging.ActiveConnection = MM_connBallumhus_STRING
RSpaging.Source = "SELECT DISTINCT Format(Dato,'yyyy-mm') AS ActiveMonths " & _
", Format(Dato,'mmm') AS MonthName " & _
"FROM underholdningskalender " & _
"ORDER BY Format(Dato,'yyyy-mm')"
RSpaging.CursorType = 0
RSpaging.CursorLocation = 2
RSpaging.LockType = 1
RSpaging.Open()

RSpaging_numRows = 0
%>

<a href="underholdning.asp?month=<%= cstr(RSpaging("ActiveMonths")) %>"><%=(RSpaging.Fields.Item("Monthname").Value)%></a>

Det virker Kanon!

Men der er lige to ting.
Jeg troede jeg kunne lave <<forrige og næste>> ved bare at lave et link der hedder:
noget med RSpaging.Movenext osv. men det vil den ikke gå med til. Kan du hjælpe mig det?

Og så er der lige det at, hvis jeg bare går ind på underholdning.asp (altså uden parametre) så vises "denne måned" ikke. Repeaten er bare tom.

Det må være denne der driller:
if not isempty(request.querystring("month")) and request.querystring("month") <> "" then
  sdt = request.querystring("month") & "-01"
  firstOfMonth = Year(sdt) & "-" & Month(sdt) & "-01"
else
  firstOfMonth = Year(Now()) & "-" & Month(Now()) & "-01"
end if
lastOfMonth = Year(firstOfMonth) & "-" & Month(firstOfMonth) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))
Avatar billede softspot Forsker
23. september 2005 - 01:22 #15
Da jeg går ud fra at du opdaterer din side hver gang, så når du opbygger månedsnavigatoren, kan du måske lige snige dig til at aflæse hvad den forrige og efterfølgende måned hedder når du har den aktuelle måned. Disse informationer kan du så bruge på dine forrige- og næste-links.

Hvad angår defaultværdien af måned, så er det lidt spøjst, for den burde da falde igennem til else-delen hvis der ikke er nogen parameter til siden... hmmm... prøv at sætte parantes omkring (not isempty(...)), selvom "not" burde have præcedens over "and"... altså:

if (not isempty(request.querystring("month"))) and (request.querystring("month") <> "") then
Avatar billede rille101 Nybegynder
23. september 2005 - 10:38 #16
Huh, du er sent oppe :)
Det virker desværre ikke med parantesen. Har prøvet at flytte rundt på den uden virkning.

Ang. forrige og næste, hvordan mener du så lige?
kan man lave noget med:
<a href="underholdning.asp?month=<%= request.querystring("month")%>">Forrige</a>
og så fortælle den at der skal trækkes 1 måned fra i yyy-mm ???
Avatar billede softspot Forsker
24. september 2005 - 03:10 #17
Ja, når man bliver fanget af en problemstilling, så løber tiden hurtigt :)

Jeg havde, egentlig forestillet mig at når du løber igennem månederne for at bygge listen med måneder op, at du så fangede den måned der, i databasen, kom lige inden den aktuelle (det er jo ikke sikkert at det er den aktuelt valgte måned minus 1, hvis der nu ikke er nogen arrangementer i de tilstødende måneder).

Hvis du f.eks. har arrangementer i flg. måneder (jf. databasen):

jan, feb, maj, jun, aug, sep, dec

og den aktuelt valgte måned er maj, så skal forrige-linket jo pege på februar og ikke april... det samme gør sig naturligvis også gældende for næste-linket :)
Avatar billede softspot Forsker
24. september 2005 - 03:13 #18
Ang. den der querystring-sjover, så vil jeg da foreslå at du prøver at udskrive om

* den er empty -> response.write IsEmpty(request.querystring("month"))
* hvilken længde den har -> response.write len(request.querystring("month"))
* hvilket indhold den har -> response.write request.querystring("month")

og så i de tilfælde hvor det ikke fungerer, være opmærksom på hvilke værdier den indeholder...
Avatar billede rille101 Nybegynder
26. september 2005 - 15:25 #19
Ang. <<forrige og næste>> ja så har du jo helt ret, det havde jeg ikke lige tænkt på.
Det bøvler jeg lidt videre med.

Querystring giver følgende resultater:

Den er empty: True
Længde: 0
Indhold: (ingen)
Avatar billede rille101 Nybegynder
26. september 2005 - 15:29 #20
Sådan ser min førHTML kode ud:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/connBallumhus.asp" -->
<%
Dim RSpaging
Dim RSpaging_numRows

Set RSpaging = Server.CreateObject("ADODB.Recordset")
RSpaging.ActiveConnection = MM_connBallumhus_STRING
RSpaging.Source = "SELECT DISTINCT Format(Dato,'yyyy-mm') AS ActiveMonths " & _
", Format(Dato,'mmm') AS MonthName " & _
"FROM underholdningskalender " & _
"ORDER BY Format(Dato,'yyyy-mm')"
RSpaging.CursorType = 0
RSpaging.CursorLocation = 2
RSpaging.LockType = 1
RSpaging.Open()

RSpaging_numRows = 0
%>
<%
              function firstletter(str)
  firstletter=ucase(left(str,1))&right(str,len(str)-1)
end function
           
if not isempty(request.querystring("month")) and (request.querystring("month") <> "") then
  sdt = request.querystring("month") & "-01"
  firstOfMonth = Year(sdt) & "-" & Month(sdt) & "-01"
else
  firstOfMonth = Year(now()) & "-" & Month(now()) & "-01"
end if
lastOfMonth = Year(firstOfMonth) & "-" & Month(firstOfMonth) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))

Dim RSunderholdning
Dim RSunderholdning_numRows

Set RSunderholdning = Server.CreateObject("ADODB.Recordset")
RSunderholdning.ActiveConnection = MM_connBallumhus_STRING
RSunderholdning.Source = "SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse " & _
"FROM underholdningskalender, musikere " & _
"WHERE underholdningskalender.Solist = musikere.navn " & _
"AND Dato BETWEEN #" & firstOfMonth & "# AND #" & lastOfMonth & "# " & _
"ORDER BY Dato"
RSunderholdning.CursorType = 0
RSunderholdning.CursorLocation = 2
RSunderholdning.LockType = 1
RSunderholdning.Open()

RSunderholdning_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 10
Repeat1__index = 0
RSunderholdning_numRows = RSunderholdning_numRows + Repeat1__numRows
%>

Er der noget her der ikke kan spille sammen?
Avatar billede softspot Forsker
26. september 2005 - 16:07 #21
Med de returværdier er det godt nok spøjst at det ikke fungerer!?

Prøv at udskifte

if not isempty(request.querystring("month")) and (request.querystring("month") <> "") then

med

if not isempty(request.querystring("month")) then

for at se om det gør nogen forskel.
Avatar billede rille101 Nybegynder
26. september 2005 - 18:39 #22
Desværre ingen forskel.
Har også prøvet:

if isempty(request.querystring("month")) and (request.querystring("month") <> "") then
  sdt = request.querystring("month") & "-01"
  firstOfMonth = Year(now) & "-" & Month(now) & "-01"
else
  firstOfMonth = Year(now()) & "-" & Month(now()) & "-01"
end if

For at se om den så ville.
Men her skete heller ingenting.
Avatar billede softspot Forsker
26. september 2005 - 20:54 #23
Der er et eller andet helt galt, for den sidste du viser der burde jo tage den aktuelle måned uanset hvad der kommer ind til siden...!?

Prøv at rette tilbage til det jeg foreslog sidst og så kald din side manuelt fra adressebaren i browseren med month-parameteren og fortæl mig hvad den så kommer med af resultat...
Avatar billede rille101 Nybegynder
26. september 2005 - 23:53 #24
Jeg kalder denne parameter:
underholdning.asp?month=2005-10

Og får disse udtræk:

den er empty: False
Hvilken længde har den: 7
Hvilket indhold har den: 2005-10
Avatar billede softspot Forsker
26. september 2005 - 23:56 #25
Hvad står der i firstOfMonth med den url du lige har vist?
Avatar billede rille101 Nybegynder
27. september 2005 - 00:24 #26
DOH. Har lige fundet ud af hvorfor vi ikke fik nogle udtræk.

I min indsæt form i en hel anden side er der vrøvl med datoformatet. Derfor tror databasen at måned er dag, og omvendt. Var inde i databasen og manuelt bytte om på tallene, og minsandten om ikke udtrækkene vrimler frem....
Sikke en skod fejl!
Avatar billede softspot Forsker
27. september 2005 - 00:30 #27
Ja, den er svær at gennemskue igennem dette lille kighul :)
Avatar billede rille101 Nybegynder
27. september 2005 - 00:32 #28
Hehe
Sådan ka man blive trukke rundt i manegen!
Mange tak for hjælpen!
Avatar billede softspot Forsker
27. september 2005 - 00:34 #29
Det var en fornøjelse - og tak for point :)
Avatar billede rille101 Nybegynder
29. september 2005 - 13:34 #30
Jeg har også dette lignende spm, hvis du er interesseret!
http://www.exp.dk/spm/651901
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