Principale utente con più risposte
VB2012-Una select sql con i dati di una listbox

Domanda
-
Ciao a tutti,
vorrei creare un filtro tramite select sql con i dati di una listbox (multiselection) scelti dall'utente . Prima cosa la listbox è in un'altra form, richiamata da quella che avrà poi il pulsante filtro. Quindi pensavo di mettere le selezioni dell'utente da listbox ad array. Una volta chiusa la form di selezione dati della list, tornare nella form principale e alla pressione di un tasto "filtra" fare una select con i dati dell'array . Come fare ad impostare la select (clausola list ? ) e l'idea di mettere le selezioni in un array è valida oppure c'è un metodo migliore ?
Grazie a tutti
Risposte
-
Ciao,
partendo dalla SELECT, puoi appoggiarti alla clausola IN. Supponendo di avere da un'ipotetica tabella "articoli" la necessità di estrarre i codici 001, 002 e 003, puoi scrivere:
SELECT * FROM articoli WHERE codice IN ('001', '002', '003')
Lato VB, per ottenere da una List la tua stringa di selezione, potresti appoggiarti alla funzione Join del tipo String. Per esempio, questo scorcio di codice:
Dim lista As New List(Of String) lista.Add("001") lista.Add("002") Dim filtro As String = String.Join(",", From s In lista Select Chr(39) & s & Chr(39))
produrrà la stringa '001', '002', che potrai utilizzare nella tua SELECT.
Spero di esserti stato di aiuto.
Emiliano Musso
- Proposto come risposta Irina Turcu venerdì 22 novembre 2013 11:19
- Contrassegnato come risposta Irina Turcu lunedì 25 novembre 2013 15:56
Tutte le risposte
-
Ciao,
partendo dalla SELECT, puoi appoggiarti alla clausola IN. Supponendo di avere da un'ipotetica tabella "articoli" la necessità di estrarre i codici 001, 002 e 003, puoi scrivere:
SELECT * FROM articoli WHERE codice IN ('001', '002', '003')
Lato VB, per ottenere da una List la tua stringa di selezione, potresti appoggiarti alla funzione Join del tipo String. Per esempio, questo scorcio di codice:
Dim lista As New List(Of String) lista.Add("001") lista.Add("002") Dim filtro As String = String.Join(",", From s In lista Select Chr(39) & s & Chr(39))
produrrà la stringa '001', '002', che potrai utilizzare nella tua SELECT.
Spero di esserti stato di aiuto.
Emiliano Musso
- Proposto come risposta Irina Turcu venerdì 22 novembre 2013 11:19
- Contrassegnato come risposta Irina Turcu lunedì 25 novembre 2013 15:56
-
-
Si, diciamo che potresti avere la tua variabile query compilata come segue:
Dim query as String = "SELECT * FROM articoli WHERE codice IN (" & filtro & ")"
Il codice sarebbe poi da perfezionare per evitare attacchi di tipo SQL Injection da parte di chi imputa i dati, ma il senso è questo.
Emiliano Musso
-
Ciao , grazie ancora. Riesci a darmi una mano su un'altra cosuccia :
Ho scoperto che in una listbox associata ai dati bisogna usare la datarowiev, siccome devo prendere tutti i valori selezionati in una listbox e metterli in una matrice, con il seguente codice :
Dim lista As New List(Of String) Dim lst_row As DataRowView = ListBox1.SelectedItem For Each list_row In ListBox1.SelectedItems 'Seleziona tutti gli elementi lista.Add(lst_row("org_acquisti").ToString) Next End Sub
anche se seleziono 3 valori nella matrice mi inserisce 3 volte il primo che trova , come se leggesse solo quello.
Dove sbaglio ?
Grazie mille
-
scusa, risolto con :
For Each list_row In ListBox1.SelectedItems 'Seleziona tutti gli elementi 'ListBox1.SetSelected(i, True) lst_row = ListBox1.SelectedItems(i) lista.Add(lst_row("org_acquisti").ToString) i = i + 1 Next
se c'è un metodo migliore, son qui ... :-)
grazie
-
Se hai un ListBox dal quale attingere per valorizzare le Rows di una DataTable, ti consiglierei di valutare qualcosa di questo tipo:
' -- ListBox1 con possibilità di scelta multipla ListBox1.SelectionMode = SelectionMode.MultiSimple ' -- Creazione di una struttura DataTable, dichiarando la colonna "org_acquisti" Dim dt As New DataTable() dt.Columns.Add("org_acquisti") ' -- Loop sugli elementi selezionati in ListBox1, aggiunta di ogni elemento come Row del DataTable For Each l As String In ListBox1.SelectedItems dt.Rows.Add(l) Next ' -- Loop sulle Rows del DataTable, esponendo il valore del dato For Each r As DataRow In dt.Rows MsgBox(r.Item(0)) Next
Dopo aver selezionato dalla ListBox gli Items desiderati, non è utile trasferirli in una List e quindi elaborarla per andare ancora su una terza struttura: basta definire la nostra DataTable, e popolarla direttamente con gli elementi selezionati in ListBox.
Spero queste note ti siano di aiuto.
Emiliano Musso