Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

SqlString a.d.h.v. listboxwaarden

Wiep Corbier
12 antwoorden
  • Wat ik wil doen is het volgende.

    (op www.amwonen.nl staat het voorbeeld om te bekijken wat ik bedoel.)

    Zoals je kunt zien staan er drie listboxen onder elkaar.
    De bovenste bevat provincies, en wanneer je op een provincie klikt volgen de bijbehorende gemeenten in de tweede listbox.
    Maar je kunt ook meerdere provincies selecteren en dan volgen alle daarbij behorende gemeenten.

    Nu mijn vraag, nadat ik al even gegoogled heb, en geen voorbeelden kon vinden, hoe dit in een sqlString te ondervangen.

    Hoe krijg ik een dataset (=vroegere RecordSet) gevuld a.d.h.v. de geselecteerde waarden?

    Graag een voorbeeldje of een link naar een voorbeeldje.
  • Wiep, dit is 1 groot javascript (zal je ook wel gezien hebben in de source), misschien als je wat ga rondstruinen op http://javascript.internet.com/forms/ vindt je na enig bewerken van de daar getoonde scripts wat je zoek.
  • [quote:b3319b653b="Wiep Corbier"]
    Graag een voorbeeldje of een link naar een voorbeeldje.[/quote:b3319b653b]

    Kant en klare voorbeelden? Daar doen we hier dus niet aan.
    Maar: recordset> array > listbox… moet te doen zijn toch?

    t.
  • Het gaat mij niet om kant en klare voorbeelden, want dan is de 'sport' er een beetje af. :D

    Ik schat dat ik voor wat ik allemaal op de pagina wil een 50 regels code nodig heb, en nu vraag ik naar de helft van één van die 50 zinnen. [b:192f3b8de9]Kortom 1% van de code.[/b:192f3b8de9]
    Dus vraag ik niet teveel, of doe ik me lui voor meen ik me te mogen veroorloven te zeggen.
    Ik maak zelf websites van tientallen pagina's en nooit zonder eerst zelf uit te zoeken hoe dat te doen.

    Nu loop ik tegen een listbox op die ik toevallig nog nooit gebruikt heb…

    In het kort:
    Ik probeer me alleen de sqlString voor te stellen:

    sqlString = "Select * from bestand where Rij = ?? SelectedItems ??"

    Ik kan dus heus zelf nog wel een listboxje op een webformulier krijgen…


    [quote:192f3b8de9]Maar: recordset> array > listbox… moet te doen zijn toch? [/quote:192f3b8de9]
    Zeker en dat is dus mijn vraag ook niet. Mijn vraag is ListBox(MultiSelect) >> QueryString
  • Ik snap je probleem niet helemaal, maar wil je niet gewoon iets doen als:[code:1:a70561e8bd]SELECT kolommen FROM tabel WHERE rij='1' OR rij='2' OR …[/code:1:a70561e8bd]

    BTW: "SELECT *" vertraagt je pagina ten opzichte van "SELECT kolom1, kolom2, etc".
  • Beste Bill, die Rij1 or Rij2 zullen in een andere vorm gegoten zijn. Immers het zijn rijen uit een listbox. Je weet niet of Rij1 wel een waarde heeft.

    En ik weet dat als je kolommen benoemt dat dat sneller is dan een '*' maar dat doet even niet terzake.

    Feitelijk weet ik alles wel…. behalve hoe ik een multiSelectedItems uitlees, of noteer/codeer.

    Ik zal het nog even visualiseren.

    In een listbox kun je met MultiSelect meerdere waardes uit die listbox selecteren.
    Zoals 2, 3 of misschien wel 6 items.
    Nu vraag ik me af hoe ik de SQL al die items laat lezen…

    Stel ik heb een listbox met 'Provincies'
    Nu selecteer ik 3 provincies tegenlijk, en wil daarna alle gemeentes opvragen die bij die 3 provincies horen.
  • Maar even verklappen dan? Hoe de WHERE er in de query uit moet zien lijkt me voor zich spreken.
    Je krijgt de gekozen provincies kommagescheiden binnen:
    Request.Form("provincie") = "1, 4, 6"
    VB-script ontbreekt het aan handige array-functies, dus je moet even met een pointer door de string om per komma een waarde aan een array toe te voegen, of om meteen die query maar te maken, scheelt weer een var, iets in de trant van:
    [code:1:253e93c031]
    While InStr(pointer, provincie, ",") > 0
    q = q & " OR Provincie = " & Mid(Provincie, pointer, InStr(pointer, provincie, ",") - 1)
    pointer = InStr(pointer, provincie, ",") + 2
    Loop[/code:1:253e93c031]
  • Volgens mij komt er uit een listbox een array met geselecteerde waarden (na een submit natuurlijk). Die kan je toch doorlopen om daarmee een query op te bouwen en die vervolgens op de database los te laten (buiten de loop dus)?

    Dus iets als[code:1:c377e6b328]
    query = "SELECT gementes FROM tabel WHERE"

    (for "elke selected item van de listbox")
    {
    query += " provincie='waarde uit listbox' OR";
    }

    excute query;
    [/code:1:c377e6b328]

    Moet je alleen zorgen dat de query goed uit de "for loop" komt, dat is nu niet het geval natuurlijk, deze zal altijd eindigen op "OR"…
  • Oké dan Bill, een dergelijk antwoord kreeg ik (een minuut geleden) ook elders.
    Zelf dacht ik dat ik ooit een ander antwoord van Annie eens gelezen had, maar ik kan me vergissen, en kan het op dit forum helaas niet terug vinden.

    Ik ga met jouw oplossing aan de gang. Kom ik later een 'betere' oplossing tegen dan zal ik die hier melden.

    Bedankt.
  • Als je de waarden komma-gescheiden binnen krijgt kan je ook nog overwegen om WHERE x IN ()[/color:6f794533bb] te gebruiken, bijv:
    [code:1:6f794533bb]
    bar = Request.Form("foo")
    ' in het geval van string waarden moet je nog even enkele quotes toevoegen om elk item

    sql = "SELECT * FROM table1 WHERE foo IN (" & bar & ")"
    [/code:1:6f794533bb]
    Natuurlijk werkt dit alleen als je zelf je queries dynamisch opbouwt (en bijv niet met geparametriseerde queries).
    En je moet (maar dat zou vanzelfsprekend moeten zijn) natuurlijk altijd even controleren of er wel valide waarden binnen komen zodat de query niet stukloopt.
  • Sorry Paulus, ik heb je bijdrage over het hoofd gezien. :oops:

    Uhm, laat ik dan ook één ding verklappen :D ik werk nu met ASP.NET.
    Daar zijn allerlei nieuwe 'Servercontrols' met allerlei nieuwe eigenschappen.

    Toch ga ik eerst even Annie's voorbeeld proberen, en als me dat niet lukt, dan ga ik voor jouw, en Bill's oplossing.

    Ik wil er wel even bij vertellen dat jullie allemaal van een ander uitgangspunt uitgaan dan ik. Ik ging niet uit van Request.

    Oké, het zal inderdaad eenvoudig zijn, maar laten we eerlijk zijn, wie gebruikt er nu een listbox zoals www.amwonen.nl ?
    Overigens gebruiken ze daar JavaScript….
    ========================================
    Goed, ik heb Annie's voorbeeld gebruikt, en het gaat bijna goed.

    [code:1:3d9b366938]
    'Haal de Plaatsnamen op, die bij de provincie horen
    PlaatsCommand = New OleDbCommand("SELECT DISTINCT Plaatsnaam FROM Project WHERE ProvincieNaam IN ('" & Plaats & "')", Connection)

    Connection.Open()
    lbPlaats.DataSource = PlaatsCommand.ExecuteReader()
    lbPlaats.DataBind()
    Connection.Close()
    [/code:1:3d9b366938]

    Ik heb een variabele aangemaakt om te controleren wat er in PLAATS staat.
    Daar staat keurig komma-gescheiden de provincies in die ik selecteer.
    Die toon ik met een response.write
    Echter, ik zie geen resultaat bij een meervoudige selectie.
    Selecteer ik één provincie, dan werkt het prima.
    (voor de niet-ASP.NET kenners, de resterende code is foutloos)
  • He Annie, die WHERE … IN (…) kende ik nog niet, maar Wiep heeft dus problemen met strings.
    De notatie moet dan dus zijn: WHERE P IN ('a', 'b', 'c') aangezien Wieps manier niet werkt. Dan moet je dus alsnog de aangeboden variabele in een array zetten om die query op te bouwen.

    Ik bedacht het volgende:
    "… WHERE InStr(1, '" & Plaats & "', Provincienaam) > 0"

    Is dat niet veel makkelijker (op MS-engines)?

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.