Avatar billede chrisrj Forsker
26. juli 2003 - 13:24 Der er 57 kommentarer og
1 løsning

Udbygge skema script

Jeg er ved at lave et ugeskema(en vagtplan).

Der skal derfor være mulighed for at resevere flere forskellige tidsrum på samme skema.

Eks. mandag fra 5 til 10 og tirsdag fra 13 til 20. ovs. ovs.

Problemet er bare at mit script kan kun resevere eet tidsrum pr. skema. :(

Jeg er helt lost mht. hvordan problemet skal løses. :(

Skriv endelig, hvis der er noget du/I ikke forstår og vil have uddybet.
Avatar billede chrisrj Forsker
26. juli 2003 - 13:25 #1
Her er min kode:

<%
id = request.querystring("id")
' her finder vi antallet af tidsrum der skal reseveres
set rse = Conn.execute ("select count(id) as antallet from vagtplan where brugerid="&id)

dim vagtarr()

antal = Clng(rse("antallet"))

redim vagtarr(antal)
' her finder vi de tidsrum der skal reseveres
sql = "select * from vagtplan where brugerid="&id
Set rs = Conn.Execute(SQL)
t = 0
do while not rs.eof
    ' her laver vi et array med tidsrum
    vagtarr(t) = "" & rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid") & "" & vbCrLf
    rs.movenext
    t = t + 1
loop
i = 0

' her kaldes funktionen der, i øjeblikket, laver skemaet
do while i < antal
    splitvagtarr(i)
    i = i + 1
loop

function splitvagtarr(tal)
    ' her ligger vi splitter vi dataerne om tidrummet op i nogle variabler
    str = vagtarr(tal)
    arr = split(str, ",")
    ' her er dagen, hvor det reseverede tidsrum findes
    dagen = arr(0)
    ' her er starten på tidsrummet
    optidstart = Int(arr(1))
    ' her er slutning på tidsrummet
    optidslut = Int(arr(2))
    response.write " dag: " & dagen & " start: " & optidstart & " slut: " & optidslut & "<br>"

' disse if sætninger bliver fjernet, når dataerne(rs("dag")) i tabellen rettes til tal.
if dagen = "mandag" then
    dagoptaget = 1
else
    if dagen = "tirsdag" then
        dagoptaget = 2
    else
        if dagen = "onsdag" then
            dagoptaget = 3
        else
            if dagen = "torsdag" then
                dagoptaget = 4
            else
                if dagen = "fredag" then
                    dagoptaget = 5
                else
                    if dagen = "lørdag" then
                        dagoptaget = 6
                    else
                        if dagen = "søndag" then
                            dagoptaget = 7
                        end if
                    end if
                end if
            end if
        end if
    end if
end if
response.write " dag: " & dagen & " " & dagoptaget &"<br>"
starttid = 0
sluttid = 1
dag = 1
rows = optidslut - optidstart
dagsat = false
do
    ' kører tiderne igennem
    response.write "<tr bgcolor='#8B1A1A'>" & vbCrLf
    response.write "<td align='center'><font size='1'>" & starttid & "-" & sluttid & "</font></td>" & vbCrLf
    do while dag =< 7
        ' køre dagene igennem
        if ((dagoptaget = dag) and ((starttid < optidstart) or (starttid >= optidslut))) then
            ' hvis det er den rigtige dag, men forkert tidspunkt
            response.write "<td align='center'><font size='1'>Det er den rigtige dag</font></td>" & vbCrLf
            dag = dag + 1
        else
            if ((dagoptaget = dag) and (starttid = optidstart)) then
                ' hvis det er den rigtige dag og rigtigt tidspunkt
                response.write "<td align='center' rowspan='" & rows & "'><font size='1'>her skal være optaget</font></td>" & vbCrLf
                dagsat = true
                dag = dag + 1
            else
                if ((dagoptaget = dag) and ((starttid > optidstart) or (starttid < optidslut))) then
                    ' hvis det er den rigtige dag og indenfor det rigtige tidspunkt
                    dag = dag + 1
                else
                    if ((not dagoptaget = dag) and (starttid = optidstart)) then
                        ' hvis det er den forkerte dag, men rigtigt tidspunkt
                        response.write "<td align='center'><font size='1'>Det er det rigtige tidspunkt</font></td>" & vbCrLf
                        dag = dag + 1
                    else
                        if ((not dagoptaget = dag) and (not starttid = optidstart)) then
                            ' hvis det er den forkerte dag og forkert tidspunkt
                            response.write "<td align='center'><font size='1'>Forkert dag og forkert tid</font></td>" & vbCrLf
                            dag = dag + 1
                        else
                            dag = dag + 1
                        end if
                    end if
                end if
            end if
        end if
    loop
    dag = 1
    dagsat = false
    starttid = starttid + 1
    sluttid = sluttid + 1
    response.write "</tr>" & vbCrLf
loop while sluttid <> 25
end function
%>
Avatar billede nmh Nybegynder
26. juli 2003 - 14:21 #2
Jeg tror, det vil være en god ide, hvis du lige skriver "nogle runde ord" om det problem, du vil løse. Jeg har selvfølgelig fået en fornemmelse ved at se på din kode, men prøv at fortælle mere, om hvad du i den sidste ende vil have til at ske.
Avatar billede chrisrj Forsker
26. juli 2003 - 14:34 #3
Ok, jeg vil have et skema der ser (nogenlunde) sådan ud:

tider mandag tirsdag onsdag torsdag fredag lørdag søndag
1-2
2-3
3-4
...
...
...
20-21
21-22
22-23
23-24

I det skema skal man så kunne resevere f.eks. tiden mandag fra kl. 2 til kl. 12 ( sættes med <td rowspan=10> (12-2) ). Det kan man også som det er nu, men man kan kun resevere een tid. Det vil jeg gerne have lavet om, så man kan resevere flere tider på samme skema.

Er det forklaret godt nok nu, eller skal jeg prøve at uddybe det mere?
Avatar billede chrisrj Forsker
26. juli 2003 - 14:45 #4
Øhh, når jeg nu skriver "..kan resevere flere ...", mener jeg naturligvis VISE resevationerne. ;)
Avatar billede nmh Nybegynder
26. juli 2003 - 15:15 #5
Jeg tror du skal forklare det ved at fortælle hvad en bruger skal gøre og hav brugeren skal se.
Har jeg forstået det ret, så skal man kunne se, hvad der er reserveret, og man skal kunne reservere.
Er det det brugeren skal kunne. Systemet skal hele tiden holde rede på hvad der er reserveret, og nye reservationer skal kune foretages.
Hvad skal man indlæse for at få reserveret?
Avatar billede chrisrj Forsker
26. juli 2003 - 15:26 #6
Dette script halder kun om "vise" delen.

Jeg skal "bare" have det til vise flere tider på skemaet.

Resten har jeg lavet og det virker fint.

I databasen har jeg en tabel(vagtplan) der indeholder disse kolonner:
id(autonummer), dag(tekst), starttid(tal), sluttid)(tal) og brugerid(tal)

Dvs. hver bruger kan have flere tider, men hvert skema skal kun vise en brugers tider.
Avatar billede nmh Nybegynder
26. juli 2003 - 16:20 #7
Bemærkning til koden if dagen="mandag" then etc...
Her er en select-sætning bedre:
select case dagen
  case "mandag"
    dagoptaget=1
...
  case "søndag"
    dagoptaget=7
end select
Er det sådan at for hver person så er der for nogle af ugens dage et starttidspunkt og et sluttidspunkt. Dvs højst 7 par, hvor et par består af et starttidspunkt og et sluttidspunkt.
Et tidspunkt er altid et helt tal mellem 1 og 24.
Du skal så have udskrevet et skema med 7 søjler og 24 rækker.
Der skal markeres i de felter, som skal svare til optaget.
F.eks. skal der være optaget om onsdagen fra kl. 11 til 14, hvis starttidspunktet den dag er 11 og sluttidspunktet er 14.

Har jeg forstået det rigtigt?
Hvis det er tilfældet kan jeg godt bikse noget sammen.
Avatar billede chrisrj Forsker
26. juli 2003 - 16:28 #8
Altså, det script jeg har lavet virker fint. Prøv det! ;)

Mht. dine spørgsmål:
"Er det sådan at for hver person så er der for nogle af ugens dage et starttidspunkt og et sluttidspunkt. Dvs højst 7 par, hvor et par består af et starttidspunkt og et sluttidspunkt."

Ja og nej. Hver person har tider på forskellige dage, men også flere tider på samme dag.

"Et tidspunkt er altid et helt tal mellem 1 og 24."
Ja, men hvis kan lade sig gøre at udvidde det til også at kunne bruge halve timer (:30), ville det være rart, men det er ikke et krav.

"Du skal så have udskrevet et skema med 7 søjler og 24 rækker."
Ligepræcist. ;)

"Der skal markeres i de felter, som skal svare til optaget."
Mja, jeg ville gerne have de felter, tidrummet optager er sammenhængende.
Avatar billede nmh Nybegynder
26. juli 2003 - 16:33 #9
Men der er aldrig overlap. Man kan altså ikke have en tid fra 13 til 15 om torsdagen og en anden tid fra 14 til 17?
Hvad med at vi først finder en god løsning, der blot markerer tidsrummene? Så kan du bagefter prøve at ændre markerings måden.
Det er altid godt at arbejde efter princippet KISS (Keep It Simple Stupid).
Avatar billede chrisrj Forsker
26. juli 2003 - 16:35 #10
Men der er aldrig overlap. Man kan altså ikke have en tid fra 13 til 15 om torsdagen og en anden tid fra 14 til 17?

Ikke på samme dag, man kan jo ikke være på vagt to gange samtidigt. ;)

Hvad med at vi først finder en god løsning, der blot markerer tidsrummene? Så kan du bagefter prøve at ændre markerings måden.

Det er fint med mig. :)
Avatar billede nmh Nybegynder
26. juli 2003 - 16:40 #11
Jeg vil komme med noget i i aften eller i morgen. Så håber jeg ikke der er en anden, der kommer mig i forkøbet.
Avatar billede chrisrj Forsker
26. juli 2003 - 16:41 #12
Hehe, konkurrencen er igang. ;)

Jeg venter med spændig!! ;D
Avatar billede nmh Nybegynder
26. juli 2003 - 17:37 #13
Nå, det tog ikke så lang tid alligevel. Her er et forslag. Der udskrives en tabel med tegnet * som afmærker et optaget tidspunkt. Men det kan jo ændres til hvad som helst. Tabllen skema indeholder de nødvendige informationer.

I vararr er data fra rs gemt.
vararr(0,... vararr(antal)
måske er varar(0)="onsdag,17,21"
her er nu et forslag:
dim Skema(7,24),i,k, A

function dag(txt)
  select case txt
    case "mandag"
      forslag=1
    case "tirsdag"
      forslag=2
    ....
  end select
end function 

for i=0 to antal
  A=split(vararr,",")
  for k=Cint(A(1)) to Cint(A(2))
    Skema(dag(vararr(0)),k)="*"
  next
next

'Nu har vi dannet et skema med 7 søjler og 24 rækker
'Værdien i et felt er *, hvis feltet skal markeres
'og ellers en tom streng.
'Nu er det blot at udskrive et skema.

Response.write("<table>"
'Alle ugedagene som overskrift:
Response.write("<tr><td>mandag</td>....<td>Søndag</td><tr>")
'Nu udskrives selve tabellen:
for i=1 to 24
  Response.write("<tr>")
    for k=1 to 7
      Response.write("<td>" & "&nbsp;" & skema(k,i) & "</td>")   
    next
  Response.write("</tr>")
next
Response.write("/<table">)
Avatar billede nmh Nybegynder
26. juli 2003 - 17:41 #14
Ups: fejl i funktionen. Der skal stå dag=1, dag=2,...
i stedet for forslag=1, forslag=2 ....
Avatar billede nmh Nybegynder
26. juli 2003 - 17:48 #15
Ups ny fejl: skema(dag(vararr(0)),k="*" skal være
           
            skema(dag(vararr(i)),k)="*"
Avatar billede chrisrj Forsker
26. juli 2003 - 18:44 #16
Jeg prøver det....
Avatar billede nmh Nybegynder
26. juli 2003 - 18:45 #17
Ok
Avatar billede chrisrj Forsker
26. juli 2003 - 18:58 #18
Jeg får en "Type mismatch " her:

A=split(vagtarr,",")

Bemærk at jeg ændret navnet til vaGTarr.

Jeg laver vagtarr sådan:

vagtarr(t) = "" & rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid") & "" & vbCrLf

Det er måske forkert? Hvordan skal ellers laves?
Avatar billede nmh Nybegynder
26. juli 2003 - 19:01 #19
nøjes med at skrive
vagtarr(t) = rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid")
Det er kun dag, starttid og sluttid, der er interessant.
Avatar billede chrisrj Forsker
26. juli 2003 - 19:02 #20
prøver...
Avatar billede chrisrj Forsker
26. juli 2003 - 19:04 #21
Stadig det samme...Jeg poster lige hele koden, for overblikkets skyld.

id = request.querystring("id")
' her finder vi antallet af tidsrum der skal reseveres
set rse = Conn.execute ("select count(id) as antallet from vagtplan where brugerid="&id)
dim Skema(7,24),i,k, A

dim vagtarr()

antal = Clng(rse("antallet"))

redim vagtarr(antal)
' her finder vi de tidsrum der skal reseveres
sql = "select * from vagtplan where brugerid="&id
Set rs = Conn.Execute(SQL)
t = 0
do while not rs.eof
    ' her laver vi et array med tidsrum
    vagtarr(t) = rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid")
    rs.movenext
    t = t + 1
loop

function dag(txt)
  select case txt
    case "mandag"
      dag=1
    case "tirsdag"
      dag=2
    case "onsdag"
      dag=3
    case "torsdag"
      dag=4
    case "fredag"
      dag=5
    case "lørdag"
      dag=6
    case "søndag"
      dag=7
  end select
end function

for i=0 to antal
  A=split(vagtarr,",")
  for k=Cint(A(1)) to Cint(A(2))
    skema(dag(vagtarr(i)),k)="*"
  next
next

'Nu har vi dannet et skema med 7 søjler og 24 rækker
'Værdien i et felt er *, hvis feltet skal markeres
'og ellers en tom streng.
'Nu er det blot at udskrive et skema.

Response.write("<table>")
'Alle ugedagene som overskrift:
Response.write("<tr><td>mandag</td><td>tirsdag</td><td>onsdag</td><td>torsdag</td><td>fredag</td><td>lørdag</td><td>Søndag</td><tr>")
'Nu udskrives selve tabellen:
for i=1 to 24
  Response.write("<tr>")
    for k=1 to 7
      Response.write("<td>" & "&nbsp;" & skema(k,i) & "</td>")   
    next
  Response.write("</tr>")
next
Response.write("</table>")

%>
Avatar billede nmh Nybegynder
26. juli 2003 - 19:11 #22
Ups. Min fejl. Der skal stå

A=split(vagtarr(i),",") så gemmes dag i A(0),start i A(1) og slut i A(2)

og skema(dag(A(0)),k)="*"

jeg var for hurtig.
Avatar billede chrisrj Forsker
26. juli 2003 - 19:13 #23
;)

Igen... :p
Avatar billede chrisrj Forsker
26. juli 2003 - 19:15 #24
Ok, nu kommer den og siger:

Subscript out of range: '[number: 1]'

/vagtplan.asp, line 57
for k=Cint(A(1)) to Cint(A(2))

Hvad er der nu galt? ;)
Avatar billede nmh Nybegynder
26. juli 2003 - 19:31 #25
Mon dine inddata er helt i orden?
Prøv at se, hvad der sker hvis du øvers sætter antal=2
Du skal dog lige være sikker på, der er 3 poser i det pågældene record-sæt.
Du må lige kontrollere om alle data har formen
ugedag, 'et tal', 'et tal'

tallene skal være mellem 1 og 24.
Avatar billede chrisrj Forsker
26. juli 2003 - 19:39 #26
Så virker det! :D

Jeg har tilføget denne linie:
antal = antal - 1

Hvordan laver vi det med sammen hængende områder?
Avatar billede chrisrj Forsker
26. juli 2003 - 19:42 #27
Jeg bliver lige mødt til at gå 1 tines tid - hunden skal luftes. :)

Er du her når jeg kommer tilbage?
Avatar billede nmh Nybegynder
26. juli 2003 - 19:50 #28
Sammenhængende område? har jeg forstået dig ret, skal felterne i skemaet være ret forskellige. F.eks. kan første søje have et felt, 2 søjle 3,etc.
Så skal der være en overordnet tabel med 7 søjler og en række (Vi ser nu bort fra øverste linie med ugedagene). Hver søjle skal bestå af en tabel med en søjle. Når tabellen udskrives, skal det så ske søjle for søjle. Det kan vist blive ret bøvlet at lave. Hvad med at lave en flot markering når et felt er optaget? farvning? Et billede?
Men jeg tænker over det.
Men har du nu ikke noget, som faktisk er anvendeligt nu?
Avatar billede nmh Nybegynder
26. juli 2003 - 19:52 #29
Det er der en god chance for. Prøv. Men sent i aften er jeg her i hvert fald.
Avatar billede chrisrj Forsker
26. juli 2003 - 20:36 #30
Så er jeg tilbage! ;)
Avatar billede chrisrj Forsker
26. juli 2003 - 20:47 #31
Ja, jeg ved godt at det ikke er nemt. Men det er jo derfor jeg spørger dig! ;)

Hvis vi nu siger at en søjle(kolonne) er inddelt i 24 rækker, hvis ingen tider er taget, så kunne en kolonne f.eks. indeholde 4 + 1 + 4 rækker, eller med andre ord: tiden fra kl. 5 til kl. 21 være optaget på den dag. Eller f.eks. 3 + 1 + 2 + 1 + 4 dvs. optaget fra kl 4 til kl. 12 og fra kl. 14 til  kl. 21.

"Hvad med at lave en flot markering når et felt er optaget? farvning? Et billede?"
Jo, det er da også en mulighed.


"Men jeg tænker over det."
Tak for det. ;)

"Men har du nu ikke noget, som faktisk er anvendeligt nu?"
anvendeligt, som i funktionelt, ja.  anvendeligt, som i færdigt, nej.
Det _skal_ være mere "lækkert". :)

PS: Har vi engenligt et liv? Jeg mener, vi sidder og koder en lørdag aften! ;)
Avatar billede chrisrj Forsker
26. juli 2003 - 21:00 #32
Hvis man bare kunne lave det på den måde at man kunne angive table'ts rækker skulle fordeles på den måde.
F.eks.
I kolonne 2 skal række 5 span'ne over 10 rækker.
Række 12 skal span'ne over 4 rækker.
I kolonne 4 skal række 3 over 8 rækker.
osv.
osv.

Forstår du ideen?
Avatar billede nmh Nybegynder
26. juli 2003 - 22:40 #33
Så er jeg her igen.
Et liv: Tjah det afhænger jo af hvad men synes er sjovt at arbejde med. Det er da bedre at lege med dette end at se et dumt program på TV
Avatar billede nmh Nybegynder
26. juli 2003 - 23:05 #34
Ja jeg jeg forstår, og med rowspan-ordren kan det du ønsker lade sig gøre. Prøv at se på denne lille tabel: (gem det som en htm fil og klik på den):
<html>
<body>

<table border=1>
<tr><td>1111111</td><td>2222222</td><td>3333333</td><td rowspan=3>4444444</td>
</tr>
<tr><td rowspan=2>11</td><td>22</td><td>33</td><td></td>
</tr>
<tr><td></td><td>222</td><td></td><td></td>
</tr>
<tr><td></td><td>2222</td><td>3333</td><td>4444</td>
</tr>
</table>
</body>
</html>
Avatar billede chrisrj Forsker
26. juli 2003 - 23:57 #35
Ja, og... ? :)
Avatar billede chrisrj Forsker
27. juli 2003 - 00:00 #36
Har du prøvet at indsætte noget i de felter du mangler?
Avatar billede chrisrj Forsker
27. juli 2003 - 00:02 #37
Vidste du forøvrigt at når man bruger rowspan skal man _ikke_ lave de td'er som dækkes af rowspan?
Avatar billede nmh Nybegynder
27. juli 2003 - 00:04 #38
Jeg sidder nu og prøver lave en udskrift der ser ud som htm-siden oven for.

ideen er at i en søjle, skal den øverste * stå i et felt af typen <td rowspan=5> Optaget</td>
stjernefelterne nedenunder skal være tomme og de html-koderne hørende til disse felter (<td> </td>) skal ikke udskrives.
Så vil du få den ønskede tabel.
Hvad skal der stå, der hvor der er optaget i tabellen?
Avatar billede nmh Nybegynder
27. juli 2003 - 00:05 #39
Svar til din sidste kommentar: ja det har jeg netop fundet ud af.
;o)
Avatar billede chrisrj Forsker
27. juli 2003 - 00:06 #40
Hvad der skal stå? Er det ikke ligegyldigt? Bare skriv et eller andet.
Avatar billede chrisrj Forsker
27. juli 2003 - 00:06 #41
:D
Avatar billede nmh Nybegynder
27. juli 2003 - 00:07 #42
Det er faktisk ret let at lave, efter at alle informationer er gemt i arrayet skema.
Avatar billede chrisrj Forsker
27. juli 2003 - 00:08 #43
Det lyder godt. Hvordan gør man så? ;)
Avatar billede chrisrj Forsker
27. juli 2003 - 00:10 #44
Kom nuuu. Du sagde det var nemt!!! ;p
Avatar billede nmh Nybegynder
27. juli 2003 - 00:10 #45
Vær lige tålmodig 5 min.
Avatar billede chrisrj Forsker
27. juli 2003 - 00:11 #46
*Suuuk* ....
Avatar billede nmh Nybegynder
27. juli 2003 - 00:29 #47
Nu er jeg næsten færdig.
Jeg mangler blot det med ****-markerede, men du akn så få en ide om hvordan det vil ende.

I vararr er data fra rs gemt.
vararr(0,... vararr(antal)
måske er varar(0)="onsdag,17,21"
her er nu et forslag:
dim Skema(7,24),i,k, A

function dag(txt)
  select case txt
    case "mandag"
      dag=1
    case "tirsdag"
      dag=2
    ....
  end select
end function 

'Skema initialiseres nu, så alle felter er af form <td>&nbsp;</td>
for i=1 to 7
  for k=1 to 24
    skema(i,k)="<td>&nbsp;</td>"
  next
next

for i=0 to antal
  A=split(vararr(i),",")
  for k=Cint(A(1)) to Cint(A(2))
    Skema(dag(A(0)),k)="*"
  next
next

'Nu skal vi sørge for at den første * i en søjle bliver til <td rowspan='antal * i søjlen'>Optaget </td>
'og stjernerne nedenunder bliver erstattet af den tomme streng.
'
'*****
'***** Det er det eneste jeg nu mangler
'*****

'Nu er det blot at udskrive et skema.

Response.write("<table>"
'Alle ugedagene som overskrift:
Response.write("<tr><td>mandag</td>....<td>Søndag</td><tr>")
'Nu udskrives selve tabellen:
for k=1 to 24
  Response.write("<tr>")
    for i=1 to 7
      response.write(skema(i,k))
    next
  Response.write("</tr>")
next
Response.write("/<table">)
Avatar billede chrisrj Forsker
27. juli 2003 - 00:31 #48
Jeg venter i spændning!! ;)
Avatar billede chrisrj Forsker
27. juli 2003 - 00:37 #49
Du mangler bare liige denne linie, der udskriver tiderne:
response.write("<td align='center'><font size='1'>" & i & "-" & i + 1 & "</font></td>")

Den skal stå lige under Response.write("<tr>") hvis du er i tvivl. ;)
Avatar billede nmh Nybegynder
27. juli 2003 - 00:43 #50
Det er den "venstreste" kolonne kan jeg forstå.
Det sidste her vil nok tage mere end 5 min. Jeg er nok ved at stoppe for i aften, men der er ikke langt igen.
Du kan jo bruge tiden på design-overvejelser.
Du skal ikke sidde oppe og vente. Jeg kan ikke love at blive færdig i aften.
Avatar billede chrisrj Forsker
27. juli 2003 - 00:45 #51
Hulk, hulk... snøft, snøft... _skal_ jeg virkelig vente til imorgen?? ;)
Avatar billede nmh Nybegynder
27. juli 2003 - 00:48 #52
men du kan da trøste dig med, at det nu er til at overskue. Det sidste her er let at lave, men det skal laves ordentligt.
God nat.
Avatar billede chrisrj Forsker
27. juli 2003 - 00:52 #53
"Det sidste her er let at lave..."

Det siger du hele tiden....

Jeg poster lige min kode, så har du noget sove på/stå op til. ;)

<table bgcolor="#b22222">
<tr bgcolor="#8B1A1A">
<td width="50" align='center'><font size="1">Tider</font></td>
<td width="70" align="center"><font size="1">Mandag</font></td>
<td width="70" align="center"><font size="1">Tirsdag</font></td>
<td width="70" align="center"><font size="1">Onsdag</font></td>
<td width="70" align="center"><font size="1">Torsdag</font></td>
<td width="70" align="center"><font size="1">Fredag</font></td>
<td width="70" align="center"><font size="1">Lørdag</font></td>
<td width="70" align="center"><font size="1">Søndag</font></td>
</tr>
<!-- #include file="databaseconn.asp" -->

<%
id = request.querystring("id")
' her finder vi antallet af tidsrum der skal reseveres
set rse = Conn.execute ("select count(id) as antallet from vagtplan where brugerid="&id)
dim Skema(7,24),i,k, A

dim vagtarr()

antal = Clng(rse("antallet"))

redim vagtarr(antal)
' her finder vi de tidsrum der skal reseveres
sql = "select * from vagtplan where brugerid="&id
Set rs = Conn.Execute(SQL)
t = 0
do while not rs.eof
    ' her laver vi et array med tidsrum
    vagtarr(t) = rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid")
    rs.movenext
    t = t + 1
loop
rs.close
set rs = nothing
Conn.close
set Conn = nothing

function dag(txt)
  select case txt
    case "mandag"
      dag=1
    case "tirsdag"
      dag=2
    case "onsdag"
      dag=3
    case "torsdag"
      dag=4
    case "fredag"
      dag=5
    case "lørdag"
      dag=6
    case "søndag"
      dag=7
  end select
end function

'Skema initialiseres nu, så alle felter er af form <td>&nbsp;</td>
for i=1 to 7
  for k=1 to 24
    skema(i,k)="<td align='center'>&nbsp;</td>"
  next
next

antal = antal - 1

for i=0 to antal
  A=split(vagtarr(i),",")
  for k=Cint(A(1)) to Cint(A(2))
    skema(dag(A(0)),k)="<td align='center' bgcolor='#EEE88D'>&nbsp;</td>"
  next
next

'Nu har vi dannet et skema med 7 søjler og 24 rækker
'Værdien i et felt er *, hvis feltet skal markeres
'og ellers en tom streng.

'Nu skal vi sørge for at den første * i en søjle bliver til <td rowspan='antal * i søjlen'>Optaget </td>
'og stjernerne nedenunder bliver erstattet af den tomme streng.
'
'*****
'***** Det er det eneste jeg nu mangler
'*****

'Nu er det blot at udskrive et skema.

'Nu er det blot at udskrive et skema.


'Alle ugedagene som overskrift:

'Nu udskrives selve tabellen:
for i=1 to 24
  Response.write("<tr bgcolor='#8B1A1A'>" & vbCrLf)
  response.write("<td align='center'><font size='1'>" & i & "-" & i + 1 & "</font></td>" & vbCrLf)
    for k=1 to 7
      Response.write("<font size='1'>" & skema(k,i) & "</font>" & vbCrLf)   
    next
  Response.write("</tr>" & vbCrLf)
next
Response.write("</table>" & vbCrLf)

%>
Avatar billede chrisrj Forsker
27. juli 2003 - 00:52 #54
Og godnat til dig, min ven. ;)
Avatar billede nmh Nybegynder
27. juli 2003 - 01:22 #55
Nå jeg kunne ikke stoppe. Her er så den kode der skal ind ved
'****
'****
function Nstjerner(i)
'Denne funktion optæller antallet af stjerner på en dag
  dim k, antal
  for k=1 to 24
    if skema(i,k)="*" then antal=antal+1
  next
  Nstjerner=antal
end function


function Pstjerne(i)
'Denne funktion finder placeringen af dagens første stjerne
  dim k
  Pstjerne=0
  for k=1 to 24
  if skema(i,k)="*" then
    Pstjerne=k
    exit function
  next
end function

'Nu kan vi så lave skemaet om, så det bliver klar til udskrift:
dim pos
for i=1 to 7
  pos=Pstjerne(i)
  Nstj=Nstjerner(i)
  if pos>0 then
    skema(i,pos)="<td rowspan=" & Nstj & ">Optaget</td>"
    for k=pos+1 to pos+Nstj-1
      skema(i,k)=""
    next
  end if
next
Avatar billede chrisrj Forsker
27. juli 2003 - 09:27 #56
Det er eddermame stort!!!!!

Det virker perfekt!!!!

Du er en gud!!!!

Du her virkelig fortjent dine points!!!!

Her er hele koden(igen):

Jeg mangler bare at finde ud af, hvad der skal være på de optaget tider.

<table bgcolor="#b22222">
<tr bgcolor="#8B1A1A">
<td width="50" align='center'><font size="1">Tider</font></td>
<td width="70" align="center"><font size="1">Mandag</font></td>
<td width="70" align="center"><font size="1">Tirsdag</font></td>
<td width="70" align="center"><font size="1">Onsdag</font></td>
<td width="70" align="center"><font size="1">Torsdag</font></td>
<td width="70" align="center"><font size="1">Fredag</font></td>
<td width="70" align="center"><font size="1">Lørdag</font></td>
<td width="70" align="center"><font size="1">Søndag</font></td>
</tr>
<!-- #include file="databaseconn.asp" -->

<%
id = request.querystring("id")
' her finder vi antallet af tidsrum der skal reseveres
set rse = Conn.execute ("select count(id) as antallet from vagtplan where brugerid="&id)
dim Skema(7,24),i,k, A

dim vagtarr()

antal = Clng(rse("antallet"))

redim vagtarr(antal)
' her finder vi de tidsrum der skal reseveres
sql = "select * from vagtplan where brugerid="&id
Set rs = Conn.Execute(SQL)
t = 0
do while not rs.eof
    ' her laver vi et array med tidsrum
    vagtarr(t) = rs("dag") & ", " & rs("starttid") & ", " & rs("sluttid")
    rs.movenext
    t = t + 1
loop
rs.close
set rs = nothing
Conn.close
set Conn = nothing

function dag(txt)
  select case txt
    case "mandag"
      dag=1
    case "tirsdag"
      dag=2
    case "onsdag"
      dag=3
    case "torsdag"
      dag=4
    case "fredag"
      dag=5
    case "lørdag"
      dag=6
    case "søndag"
      dag=7
  end select
end function

'Skema initialiseres nu, så alle felter er af form <td>&nbsp;</td>
for i=1 to 7
  for k=1 to 24
    skema(i,k)="<td align='center'>&nbsp;</td>"
  next
next

antal = antal - 1

for i=0 to antal
  A=split(vagtarr(i),",")
  for k=Cint(A(1)) to Cint(A(2))
    skema(dag(A(0)),k)="*"
  next
next

'Nu har vi dannet et skema med 7 søjler og 24 rækker
'Værdien i et felt er *, hvis feltet skal markeres
'og ellers en tom streng.

'Nu skal vi sørge for at den første * i en søjle bliver til <td rowspan='antal * i søjlen'>Optaget </td>
'og stjernerne nedenunder bliver erstattet af den tomme streng.
'
function Nstjerner(i)
'Denne funktion optæller antallet af stjerner på en dag
  dim k, antal
  for k=1 to 24
    if skema(i,k)="*" then antal=antal+1
  next
  Nstjerner=antal
end function


function Pstjerne(i)
'Denne funktion finder placeringen af dagens første stjerne
  dim k
  Pstjerne=0
  for k=1 to 24
      if skema(i,k)="*" then
        Pstjerne=k
        exit function
    end if
  next
end function

'Nu kan vi så lave skemaet om, så det bliver klar til udskrift:
dim pos
for i=1 to 7
  pos=Pstjerne(i)
  Nstj=Nstjerner(i)
  if pos>0 then
    skema(i,pos)="<td align='center' bgcolor='#EEE88D' rowspan=" & Nstj & ">Optaget</td>"
    for k=pos+1 to pos+Nstj-1
      skema(i,k)=""
    next
  end if
next

'Nu er det blot at udskrive et skema.

'Nu udskrives selve tabellen:
for i=1 to 24
  Response.write("<tr bgcolor='#8B1A1A'>" & vbCrLf)
  response.write("<td align='center'><font size='1'>" & i & "-" & i + 1 & "</font></td>" & vbCrLf)
    for k=1 to 7
      Response.write("<font size='1'>" & skema(k,i) & "</font>" & vbCrLf)   
    next
  Response.write("</tr>" & vbCrLf)
next
Response.write("</table>" & vbCrLf)
%>
Avatar billede nmh Nybegynder
27. juli 2003 - 10:28 #57
Men jeg siger tak for point. Det var faktisk sjovt at lave!
Avatar billede chrisrj Forsker
27. juli 2003 - 10:33 #58
Ja, ikke. :)

Nu ved jeg i hvert fald, hvem jeg skal spørge næste gang, jeg skal lave noget lettere kompliceret. ;)
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