[ASP] Query toont niet alles

Pagina: 1
Acties:

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ik heb een pagina waar voor een persoon een overzicht moet worden getoond van vragen die hij/ zij heeft ingevuld.

Met behulp van deze query toon ik alle informatie van een persoon:

code:
1
2
3
4
5
CSR = Request.Querystring("ID")

rsCsr.Open "Select * From Csrs, CsrInfo, CsrsKlanten, CsrVragen, Klanten Where
CsrsKlanten.Csr_ID = Csrs.ID AND Klanten.ID = CsrsKlanten.Klant_ID AND
CsrVragen.CSR_ID = CsrInfo.ID AND CsrInfo.ID =" & CSR, Conn


Die Query toont in ieder geval de juiste informatie voor de juiste persoon.

Vervolgens wil ik dus alle vragen uit de database tonen en vragen die voorkomen in de tabel "CsrsVragen" aangevinkt zien voor de desbetreffende persoon.

Met deze query doe ik dat, maar gaat dus niet helemaal goed:
code:
1
2
3
4
SELECT CSRVragen.*, CSRVragen.Vraag_ID, *
FROM CSRVragen RIGHT JOIN (Vragen INNER JOIN Categorieen ON
Vragen.Categorie_ID = Categorieen.ID) ON CSRVragen.Vraag_ID = Vragen.ID
Where CSR_ID=" & CSR, Conn


Vervolgens krijg ik alleen de vragen te zien die die persoon heeft aangevinkt en niet de rest van de vragen.

Hoe kan ik dit oplossen ?

Pay peanuts get monkeys !


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 21:00
Waar is je CsrsKlanten gebleven? In welke tabel komt CSR_ID voor en op welke wil je selecteren?
Zoek bovendien even naar 'parameterized queries' om beveiligingsissue #1 aan te pakken.

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ter aanvulling.

De tabellen zien er dus als volgt uit:

Afbeeldingslocatie: http://www.xs4all.nl/~uwsite/got/csr1.gif


Dit genereert de volgende output:

Afbeeldingslocatie: http://www.xs4all.nl/~uwsite/got/csr2.gif

Als ik nu dus in mijn ASP pagina een selectie doe op basis van het ID van die persoon: CSR_ID, dan zie ik alleen nog maar de vragen die hij/ zij heeft aangevinkt en dus niet de rest van de vragen.

Om de checkboxen weer te geven gebruik ik onderstaande code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
While Not rsVragen.EOF
                If n = 18 then Response.Write "<td width=""400"">"
                if VorigeCategorie <> rsVragen("Categorie") then
                Response.Write "<br>" & "<strong>" & 
Ucase(rsVragen("Categorie")) & "</strong>" & "<br>"
                VorigeCategorie = rsVragen("Categorie")
                End If
                %>
                <input type="checkbox" name="vragen" value="<%=rsVragen("Vragen.ID")%>" 
<%If rsVragen("Vragen.ID") = rsVragen("CSRVragen.Vraag_ID") then response.write "CHECKED" %>>
<%=rsVragen("Vraag")%><br>
                <%
                n = n + 1
        rsVragen.MoveNext
        Wend

Pay peanuts get monkeys !


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dat is toch precies wat je query zou moeten doen? Ik denk dat je je zult moeten inlezen in Joins en Left Outer Joins in het bijzonder. Het gaat dan om het laatste deel van je query, waar je joint op CSRVragen.

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ik kom er niet uit, dus ben maar wat anders gaan proberen, wat bijna werkt.

code:
1
2
3
4
5
set rsGevinkt = Server.CreateObject("ADODB.RECORDSET")
rsGevinkt.Open "Select * From CsrVragen Where CSR_ID =" & CSR, Conn

set rsVragen = Server.CreateObject("ADODB.RECORDSET")
rsVragen.Open "SELECT * FROM  AlleVragen", Conn


2 recordsets. De ene haalt alle vragen_ID's op die een persoon heeft aangevinkt. Bijvoorbeeld 9 vragen aangevinkt.

De andere recordset haalt alle mogelijk vragen en categorieen op, in dit geval 34 vragen.

Met onderstaande code laat ik dit op het scherm zien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Do While Not rsVragen.EOF
            If n = 18 then Response.Write "<td width=""400"">"
                if VorigeCategorie <> rsVragen("Categorie") then
                    Response.Write "<br>" & "<strong>" 
& Ucase(rsVragen("Categorie")) & "</strong>" & "<br>"
                    VorigeCategorie = rsVragen("Categorie")
                End If
                rsGevinkt.MoveFirst
                While NOT rsGevinkt.EOF
                %>
                <input type="checkbox" name="vragen" value="<%=rsVragen("Vragen.ID")%>" 
<% If rsVragen("Vragen.ID") = rsGevinkt("Vraag_ID") then response.write "CHECKED" %>>
<%=rsVragen("Vraag")%><br>
                <%
                rsGevinkt.MoveNext
                wend
            n = n + 1               
        rsVragen.MoveNext
        Loop


Nu krijg ik wel alle vragen te zien en de juiste vragen zijn aangevinkt, maar iedere vraag wordt nu 9x keer getoond op het scherm ? Oftewel het aantal keer uit de CsrVragen tabel voor de desbetreffende persoon.

Wat doe ik toch fout ???

Pay peanuts get monkeys !


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je hebt een while lus in een while lus, denk daar eens goed over na, want volgens mij is dat ook niet helemaal wat je wil.
De eerste (buitenste) while-lus is goed, je moet immers door alle vragen heen.
Maar vervolgens ga je voor iedere vraag door alle aangevinkte vragen heen en die toon je ook. Je moet nog even checken of de aangevinkte vraag degene is uit de buitenste lus en alleen dan weergeven.

Dit lost in principe je probleem op, maar je kunt het ook allemaal met 1 query doen. Vergis ik me of ben je net begonnen met programmeren en met databases?

ps: Je gebruikt zowel do while ... loop als while ... wend. Ik zou er 1 kiezen als jouw favoriet en alleen die gebruiken. Ikzelf gebruik liever de eerste.
Pagina: 1