19. maj 2004 - 09:56Der er
16 kommentarer og 1 løsning
Problem med Do While og EOF
Hey
Jeg er ved at kigge lave en lille hurtig rettighedsudelling, men jeg har problemer med at få vist informationerne rigtigt. Selve tilføjelse og fjerningen af rettigheder for folk fungere fint nok. Det kan jeg se inde i databasen, at det gør. Men problemet ligger i selve visningen af det. Den skriver den første Tournament, men stopper så derefter.
Her er koden der mobber mig...
if data1.eof then do while not data.eof bg = false do while not data2.eof bg = not bg %> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <td width="20%">Har ikke rettighed</td> <td width="15%"><a href="userTourLst.asp?action=add&rdid=<%=data2("tm_Tournament")%>&usid=<%=data("us_ID")%>">Tildel</a></td> </tr> <% data2.movenext loop data.movenext loop else do while not data1.eof bg = false %> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <% if not data2.eof then 'do while not data2.eof bg = not bg %> <%if data1("proamAdmin") = 1 then%> <td width="20%">Har rettighed</td> <td width="15%">N/A</td> <%data2.movenext()%> <%end if%> <%if data1("tm_tournament") = data2("tm_tournament") then%> <td width="20%">Har rettighed</td> <td width="15%"><a href="userTourLst.asp?action=remove&rdid=<%=data2("tm_Tournament")%>&usid=<%=data1("ta.us_ID")%>">Fjern</a></td> <%data2.movenext()%> <%end if%> <%else%> <td width="20%">Har ikke rettighed</td> <td width="15%"><a href="userTourLst.asp?action=add&rdid=<%=data2("tm_Tournament")%>&usid=<%=data1("ta.us_ID")%>">Tildel</a></td> <%end if%> </tr> <% 'data2.movenext 'loop data1.movenext loop 'next
set data2 = nothing set data1 = nothing set data = nothing end if
Jeg har udkommenteret noget af det kan i se, en mislykket for-løkke. Derudover kan det siges, at den første del af den store if-sætning, fungerer fint nok. Det er faktisk kun efter else, den brokker sig. Det den gør, er at skrive Tournament, og så stoppe den. Den skriver altså ikke hvorvidt man har rettighed eller ej.
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
okay, nu sker der da fremskridt. Ved at putte "set data2=..." ind i do while data1.eof, så får jeg nu vist alle tournaments og deres rettighed. Problemet jeg nu er stødt ind i, er når jeg tildeler rettighed til mere end en tour, så bliver alle tournaments vist en gang til. Det virker som om at den kører loop'et igennem for hver gang der er tildelt rettighed til en tour.
Den nye kode ser sådan ud:
if data1.eof then do while not data.eof bg = false mySQL2 = "SELECT DISTINCT tm_Tournament FROM Tilmeldinger " &_ "ORDER BY tm_Tournament" 'response.Write(mysql2) 'response.End set data2 = dbc.execute(mySQL2) do while not data2.eof bg = not bg %> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <td width="20%">Har ikke rettighed</td> <td width="15%"><a href="userTourLst.asp?action=add&rdid=<%=data2("tm_Tournament")%>&usid=<%=data("us_ID")%>">Tildel</a></td> </tr> <% data2.movenext loop data.movenext loop else do while not data1.eof bg = false mySQL2 = "SELECT DISTINCT tm_Tournament FROM Tilmeldinger " &_ "ORDER BY tm_Tournament" 'response.Write(mysql2) 'response.End set data2 = dbc.execute(mySQL2) %> <% 'if data2.eof then do while not data2.eof bg = not bg %> <%if data1("proamAdmin") = 1 then%> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <td width="20%">Har rettighed</td> <td width="15%">N/A</td> <%'data2.movenext()%> <%'end if%> <%else%> <%if data1("tm_tournament") = data2("tm_tournament") then%> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <td width="20%">Har rettighed</td> <td width="15%"><a href="userTourLst.asp?action=remove&rdid=<%=data2("tm_Tournament")%>&usid=<%=data1("ta.us_ID")%>">Fjern</a></td> <%'data2.movenext()%> <%'end if%> <%elseif data1("tm_tournament") <> data2("tm_tournament") then%> <tr class="bg<%=bg%>"> <td width="65%"><%=data2("tm_Tournament")%></td> <td width="20%">Har ikke rettighed</td> <td width="15%"><a href="userTourLst.asp?action=add&rdid=<%=data2("tm_Tournament")%>&usid=<%=data1("ta.us_ID")%>">Tildel</a></td> <%end if%> </tr> <%end if%> <% data2.movenext loop data1.movenext loop 'next
set data2 = nothing set data1 = nothing set data = nothing end if
set rs1 = conn.execute("select id, vej, husnr from MineHuse") do while not rs1.eof response.write rs1("vej") & " " & rs1("husnr") set rs2 = conn.Execute("select name from personer where husID="& rs1("id")) '<--------- do while not rs2.eof response.write rs2("name") rs2.MoveNext loop rs1.MoveNext loop
hmm, tror ikke det er der problemet ligger. Altså : set rs2 = conn.Execute("select name from personer where husID="& rs1("id")) '<---------
Hvis jeg sætter et = på, så for jeg kun vist de tournaments, som personen har rettighed til. Jeg skulle jo gerne have vist alle tours, og så skal muligheden for at ændre rettighed så være der for hver tournament.
Jeg skal lige være sikker på, hvad det er du vil vise. For der skal laves lidt om på sql'erne. Og hvad bruges de 3 tabeller til (tblUser, Touradmin, Tilmeldinger)
tblUser --> har info om brugeren i Touradmin --> har info om hvilke tours som brugeren har rettighed til tilmeldminger --> indeholdende en masse tilmeldinger til de forsk. tours. Men det er også herfra at tournavnet bliver hentet (mySQL2). Det er ikke mig der har bygget databasen op, så jeg ved ikke lige hvorfor det ligger derinde.
Det jeg skal have vist. Lad os sige at vi har tour1, tour2 og tour3. Brugeren Bent har rettighed til at redigere i tour1 og tour3. Så skal jeg have vist en liste der ser sådan her ud:
TourNavn: - Rettighed: - Ændringsmulighed tour1 - Har rettighed - Fjern tour2 - Har ikke rettihged - Tildel tour3 - Har rettighed - Fjern
Fjern og tildel er så links der indsætter eller sletter en ny entry i tabellen touradmin...
Så det den gør med ovenstående kode, er at vise det sådan her: TourNavn: - Rettighed: - Ændringsmulighed tour1 - Har rettighed - Fjern tour2 - Har ikke rettihged - Tildel tour3 - Har rettighed - Tildel tour1 - Har rettighed - Tildel tour2 - Har ikke rettihged - Tildel tour3 - Har rettighed - Fjern
Altså den viser alle tours to gange, en for hver tour der er rettighed til. Hvis jeg sletter den ene, så står det fint, men går altså galt når jeg tildeler flere rettigheder til en person.
der mangler tabeller, det har jeg også konkluderet. Men som det er, så kan jeg ikke lave nye tabeller. Det er den her udgave jeg har at gå ud fra... Lidt træls, men sådan er det desværre...
Det kommer et andet sted fra, fra et andet site. Det er også derfor det er lidt mystisk at hente et tournavn ud. Jeg havde nu også lavet det på en anden måde, hvis det havde været mig der havde fået lov til at bestemme fra starten af...
Men jeg har fået snævret mit problem ind nu. Jeg kører en do while igennem alle de gange der er "hits" i touradmin tabellen. Og når der så er rettigheder til 2 tours for en bruger, så er det jo klart at den skriver det hele 2 gange. Men hvordan dælen for jeg den så krejlet, det er lige det...
jeg bliver nok nød til at skrive det som seudo kode, for jeg kan ikke helt forstå opbygningen.
set rs = conn.execute("select alle tour (kun en gang)") do while not rs.eof set rs1 = conn.execute("select * from Touradmin where userid=DinUser and tourID="& rs("tourID")) if not rs1.eof then 'Har adgang else 'Har ikke adgang end if rs.MoveNext loop
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.