[ASP/SQL] Dynamisch list box generen *

Pagina: 1
Acties:

  • BadVibes
  • Registratie: April 2000
  • Laatst online: 06-02-2016
Ik ben bezig vanuit een database een dropdown list te vullen waaruit de bezoeker een keuze kan maken waarna de bijbehorende records zichtbaar worden.
Maar.. ik kom er niet uit.

Ik heb 2 tables gemaakt te weten:
  • tblSuppliers (met naw gegevens van leveranciers) en
  • tblConsumerType (met zes typen consumers: consument, wederverkoper, zorginstelling, etc.)
De bedoeling is dat de bezoeker een keuze maakt tot welke ConsumerType hij/zij hoort waarna het resultaat een lijst laat zien van mogelijk addressen waar hij/zij kan bestellen (de naw gegevens uit tblSuppliers).

De lijst vullen met records uit tblConsumerType lukt me met de volgende code:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%
ErrorMsg = OpenDatabase(Conn, DATABASE)
If ErrorMsg <> "" Then
Else
    If Id = "" Then
        Set Rs = Conn.Execute("SELECT * FROM tblConsumerType")
        If Rs.Eof Then
            Response.Write "Geen leveranciers gevonden."
        Else
                Response.Write "<select id=""SelectSupplier"" title=""Kies uw leverancier"" onchange=""GoUrl(this)"">" & vbCr
                Response.Write "<option value=""#"" selected>Maak uw keuze</option>" & vbCr
                Response.Write "<option>-----------------</option>" & vbCr
            While Not Rs.Eof
                Response.Write "<option value=""" & "default.asp" & "?id=" & Rs("ConsumerTypeID") & """>" & Rs("ConsumerTypeName") &_
                "</option>" & vbCr
                Rs.MoveNext
            Wend
            Response.Write "</select>"
        End If
        Rs.Close
        Set Rs = Nothing

So far so good, de volgende code volgt
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
      Else
        On Error Resume Next
        Set Rs = Conn.Execute("SELECT * FROM tblSuppliers WHERE SuppType1='Consument' AND IsPublish=1 AND (SuppID = " & Id & ")")
        If Err <> 0 Then
            Response.Write "Geen leveranciers gevonden..."
        End If
        On Error Goto 0
        If Rs.Eof Then
            Response.Write "Geen leveranciers gevonden..."
        Else
            Response.Write "<h4>" & Rs("SuppName") & "</h4>" & vbCr
            Response.Write "<p class=""s11"">" & Rs("SuppAddress1") & "<br />" & vbCr
            Response.Write Rs("SuppAddress2") & "<br />" & vbCr
            Response.Write Rs("SuppPhone") & "<br />" & vbCr
            Response.Write Rs("SuppWeb") & "</p>" & vbCr
            Response.Write "<p class=""s11"">" & Rs("SuppDescrip") & "</p>" & vbCr
        End If
        Rs.Close
        Set Rs = Nothing
    End If
End If
%>

Het eerst deel werkt goed, de lijst wordt netjes gevuld met alle velden uit de table. Alleen weet ik niet zeker of ik een onchange=GoUrl moet gebruiken of dat ik beter een <form> kan gebruiken?
Deel 2 van de code laat niet meer zien dan de 1 op 1 resultaten van de tabel tblSuppliers (id=1 is de eerste, id=2 is de tweede, etc.). Da's natuurlijk niet de bedoeling, ik moet een lus hebben waarin wordt gecheckt welke leveranciers nog meer van toepassing zijn. Moet ik dus een derde tabel maken?

De fout ligt ook in de database zelf, ik ben niet op de hoogte van welke relatie ik nu moet gebruiken. Het is toch een "one to many" relatie? immers, 1 leverancier kan meerdere consumertypen hebben. Hoe moet ik die relatie leggen in de SQL Server Enterprise Manager?

[ Voor 16% gewijzigd door BadVibes op 10-12-2004 15:43 . Reden: aiai, geen titel en ik kan het niet meer aanpassen... sorry! ]


  • Equator
  • Registratie: April 2001
  • Laatst online: 16:26

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Da's natuurlijk niet de bedoeling, ik moet een lus hebben waarin wordt gecheckt welke leveranciers nog meer van toepassing zijn. Moet ik dus een derde tabel maken?
Dan moet je niet selecteren op ID.
ASP:
1
Set Rs = Conn.Execute("SELECT * FROM tblSuppliers WHERE SuppType1='Consument' AND IsPublish=1")


En vergeet je niet een RS.MoveNext. Anders krijg je alleen het eerste result.

Zoiets dan..
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Else
        On Error Resume Next
        Set Rs = Conn.Execute("SELECT * FROM tblSuppliers WHERE SuppType1='Consument' AND IsPublish=1")
        If Err <> 0 Then
            Response.Write "ERROR" & Err.Description
        End If
        On Error Goto 0
        If Rs.Eof Then
            Response.Write "Geen leveranciers gevonden..."
        Else
                While not RS.EOF
                    Response.Write "<h4>" & Rs("SuppName") & "</h4>" & vbCr
                    Response.Write "<p class=""s11"">" & Rs("SuppAddress1") & "<br />" & vbCr
                    Response.Write Rs("SuppAddress2") & "<br />" & vbCr
                    Response.Write Rs("SuppPhone") & "<br />" & vbCr
                    Response.Write Rs("SuppWeb") & "</p>" & vbCr
                    Response.Write "<p class=""s11"">" & Rs("SuppDescrip") & "</p>" & vbCr
                    RS.MoveNext
               Wend
        End If
        Rs.Close
        Set Rs = Nothing
    End If
End If
%>

[ Voor 76% gewijzigd door Equator op 10-12-2004 15:57 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

In de SQL Server kan je een nieuwe Diagram aanmaken, daarin kan je slepen en doen. Overigens maakt dat helemaal niks uit voor je SQL, die kijkt zelf niet direct naar relaties die jij hebt voorgedefineerd. Ik zou ze wel leggen als ik jou was (kan dus via dat diagram).

En mijn voorkeur voor het posten van een form gaat uit naar de method=post en dan gewoon een submit. Maar dat maakt verder weinig uit

Als een leverancier meerdere consumertypes kan hebben, dan kan je het al niet opslaan in de tblSuppliers.

Als een ConsumentType meerdere leverancies kan hebben, kan je het ook daar niet opslaan.

Dan krijg je een veel op veel relatie en zal je een koppeltabel moeten maken:

tblSuppliersConsumerType
- SuplierID
- ConsumerTypeID

En dan via die tabel je SQL laten lopen

[ Voor 33% gewijzigd door Jaspertje op 10-12-2004 16:27 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:45

gorgi_19

Kruimeltjes zijn weer op :9

Reden: aiai, geen titel en ik kan het niet meer aanpassen... sorry!
.oisyn schreef op zondag 09 mei 2004 @ 23:40:
Mocht je het zelf nou zien dat je een topictitel vergeten bent, ga dan niet heel stom je bericht lopen editten met iets als

Daar hebben wij namelijk weinig aan :P. Omdat de mods dan zelf een titel moeten verzinnen, en daardoor eerst de topicstart door moeten lezen, zodat het niet even snel geedit kan worden door een mod die toevallig even langs kwam en weinig tijd had. Dus, als je het ziet, bedenk dan meteen een titel en zet het erbij in je topic of via een topicreport (de [afbeelding]-knop bovenaan je topic), zodat een mod de titel meteen kan aanpassen. Dank u :)
Oftewel; jij kan hem niet meer wijzigen, maar geef dan even aan wat de titel wel moet zijn :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • BadVibes
  • Registratie: April 2000
  • Laatst online: 06-02-2016
Jaspertje schreef op vrijdag 10 december 2004 @ 16:24:Als een leverancier meerdere consumertypes kan hebben, dan kan je het al niet opslaan in de tblSuppliers.

Als een ConsumentType meerdere leverancies kan hebben, kan je het ook daar niet opslaan.

Dan krijg je een veel op veel relatie en zal je een koppeltabel moeten maken:

tblSuppliersConsumerType
- SuplierID
- ConsumerTypeID

En dan via die tabel je SQL laten lopen
Okay, ik heb nu een derde (koppel)tabel gemaakt. Ik heb geen idee hoe ik nu middels SQL de juiste naw gegevens van de leveranciers moet tonen. De gegevens in de koppeltabel zijn immers alleen maar ID nummers?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Zoek eens naar JOINs in de documentatie. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BadVibes
  • Registratie: April 2000
  • Laatst online: 06-02-2016
Na veel gelezen te hebben, heb ik mijn juiste query kunnen samenstellen. Het is me een fraaie geworden. Komt ie:

code:
1
2
3
4
SELECT tblSuppliers.*, tblConsumerType.ConsumerTitle FROM tblSuppliersConsumerType 
 JOIN tblConsumerType ON tblConsumerType.ConsumerTypeID=tblSuppliersConsumerType.ConsumerTypeID 
 JOIN tblSuppliers ON tblSuppliers.SuppID=tblSuppliersConsumerType.SuppID 
  WHERE tblSuppliers.IsPublish=1 AND (tblSuppliersConsumerType.ConsumerTypeID=" & Id & ")
Zit deze query wat netjes in elkaar? Het werkt in ieder geval wel perfect.
Deze ellendig lange query zal ingekort worden wanneer ik mijn tables een iet wat kortere benaming geef. Dat ga ik zo maar 's doen. :P

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt een alias voor tabellen aanmaken in een query, je hoeft de namen dus niet in te korten :)

SELECT s.*,
FROM tblSuppliers s

je kunt nu de letter 's' gebruiken in plaats van de hele naam.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1