Simon Kibsgård wrote:
> Torben Brandt wrote in dk.edb.internet.webdesign.serverside.asp:
>
>>Grunden skulle så være at du kunne vise en kalender "uden huller".
>>
>>I så fald er løsningen ikke at oprette tomme poster i databasen, men i
>>stedet ændre på den måde du viser posterne på.
>>Eksempel i pseudokode:
>> startdato = 17.05.2003
>> slutdato = 13.06.2003
>> rs = udtræk poster fra database mellem startdato og slutdato
>> sorter efter dato
>> sålænge (startdato <= slutdato) {
>> hvis (rs.eof) {
>> udskriv tom dag
>> } ellers hvis (startdato = rs(dato)) {
>> udskriv posten fra rs
>> } ellers {
>> udskriv tom dag
>> }
>> startdato = startdato + 1
>> }
>>
>>Dette duer kun hvis der maksimalt er en post i databasen pr. dato, men
>>kan nemt ændres til at kunne klare flere.
>>Hvis det ikke var det du mente i dit indlæg, så forklar gerne hvad de
>>tomme poster i databasen skal bruges til...
>
> Det var præcis ovenstående jeg mente. Desværre kan jeg ikke helt forstå
> din pseduokode (hvad betyder de der "}" ?) . Nedenstående er min nuværende
> kode - og jeg skal gerne bruge den til alle poster (i).
{...} skulle være i stedet for Then...End If eller Do While...Loop.
Jeg prøver at skrive noget "rigtig" kode :)
> strSQL = "SELECT * FROM vagtplan WHERE Dato BETWEEN Dateserial(" &
> strfromyear & ", " & strfrommonth & ", " & strfromday & ") AND
> Dateserial(" & strtoyear & ", " & strtomonth & ", " & strtoday & ") ORDER
> BY Dato"
>
> Set rs = Conn.Execute(strSQL)
>
> Response.Write ("<table>")
> Response.Write ("<tr>")
> For i = 1 To RS.Fields.Count - 1
> Response.Write ("<td>" & RS(i).Name & "</td>")
> Next
> Response.Write("</tr>")
Hertil ser dt fint ud. Jeg er dog i tvivl om, om man kan bruge
RS.Fields.Count hvis RS er tomt - men det har du vel testet :)
> Do while Not RS.Eof
> Response.Write ("<tr>")
> For i = 1 To RS.Fields.Count - 1
> Response.Write ("<td>" & RS(i) & "</td>")
> Next
> Response.Write ("</tr>")
> RS.Movenext
> Loop
Ovenstående ville jeg lave således:
[Antag at startdato og slutdato er at typen dato]
Do While DateDiff("d", startdato, slutdato) >= 0
If RS.EOF Then
' Vi udskriver en blank dag
Response.Write "<tr><td> </td></tr>"
ElseIf DateDiff("d", startdato, RS("dato")) = 0 Then
' Der er noget i kalenderen denne dag
Response.Write "<tr>"
For i = 1 To RS.Fields.Count - 1
Response.Write "<td>" & RS(i) & "</td>"
Next
Response.Write "</tr>"
RS.MoveNext
Else
' RS er ikke tom (der er mere i kalenderen) men ikke noget denne dag
' Vi udskriver en blank dag
Response.Write "<tr><td> </td></tr>"
End If
startdato = DateAdd("d", 1, startdato)
Loop
>
> Response.Write ("</table>")
>
> Jeg kan forestille mig at det ikke gør det nemmere at jeg bruger
> dateserial til datoformatet (det gør det selvf. nemmere i andre
> henseender).
Nej nej, brug endelig DateSerial. Så går man aldrig galt i byen :)
En anden ting: Når du udskriver alle felterne i RS, så bruger du
For i = 1 To RS.Fields.Count - 1
Skal du ikke enten starte med i = 0 eller gå op til RS.Fields.Count
(uden -1)
mvh Torben