Ga naar inhoud

SqlString a.d.h.v. listboxwaarden


anoniem

Aanbevolen berichten

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.
Link naar reactie
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
Link naar reactie
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.
Link naar reactie
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]
Link naar reactie
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"...
Link naar reactie
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.
Link naar reactie
Als je de waarden komma-gescheiden binnen krijgt kan je ook nog overwegen om [color=blue:6f794533bb]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.
Link naar reactie
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)
Link naar reactie
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)?
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...