<% 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 %>
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.
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?
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?
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.
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.
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).
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>" & " " & skema(k,i) & "</td>") next Response.write("</tr>") next Response.write("/<table">)
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>" & " " & skema(k,i) & "</td>") next Response.write("</tr>") next Response.write("</table>")
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'
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?
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! ;)
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.
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
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>
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?
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> </td> for i=1 to 7 for k=1 to 24 skema(i,k)="<td> </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">)
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.
<% 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> </td> for i=1 to 7 for k=1 to 24 skema(i,k)="<td align='center'> </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'> </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)
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
<% 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> </td> for i=1 to 7 for k=1 to 24 skema(i,k)="<td align='center'> </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) %>
Nu ved jeg i hvert fald, hvem jeg skal spørge næste gang, jeg skal lave noget lettere kompliceret. ;)
Synes godt om
Ny brugerNybegynder
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.