Annullare il parametro di una query di TableAdapter

domenica 05 aprile 2009 - 14.21

Antoniuccio Profilo | Newbie

Salve a tutti, sono un neofita della programmazione Ado.net, sto costruendo un'applicazione windows in Visual Basic 2008 e ho il seguente problema circa una query di TableAdapter:

Ho costruito un form filtro per una tabella di un dataset visualizzata su una datagridview, ed ho cotruito una query parametrizzata sul TableAdapter della tabella in questione. L'utente sceglie, da combobox, i valori da passare ai parametri, ossia i filtri sui quali effettuare la ricerca delle righe sulla tabella. Finchè l'utente specifica tutti i parametri, il ds restituisce le righe richieste e tutto funziona, se invece l'utente omette un parametro, perchè magari non intende filtrare per quel campo, il ds riconosce "vuoto" il parametro e non restituisce alcuna riga.

es.

Dim marca as string = cbxMarca.text
Dim tipo as string= cbxTipo.text
Dim targa as string = txtTarga.text

TableAdapter.Filtro(ds.tabella, marca, tipo, targa)

se filtro per :

marca=alfa
tipo=147
tara=CD478XY

il ds mi tira fuori la riga indicata, e tutto funziona. Se invece volessi effettuare una ricerca solo su marca e tipo, senza indicare la targa, come faccio ad annullare il parametro della query? Ossia come faccio a dire al ds che deve tirarmi fuori tutte le "Alfa 147" qualsiasi targa esse abbiano?

alexmed Profilo | Guru

Ciao
Prova così:

TableAdapter.Filtro(ds.tabella, marca & '%', tipo & '%', targa & '%')

Ciao

alexmed

Antoniuccio Profilo | Newbie

Mi dispiace ma... stesso risultato, qualsiasi valore possa indicare viene considerato come una stringa, comincio a pensare che bisogni trovare una soluzione a livello di select, magari con l'operatore "or", solo che non so benissimo come impostarlo...

Grazie, Antonio.

alexmed Profilo | Guru

Solo una domanda:

> ed ho cotruito una query parametrizzata sul TableAdapter della tabella in questione.

Hai aggiunto i parametri per tutte le colonne?

Quindi

marca = @marca
tipo = @tipo
targa = @targa

alexmed

Antoniuccio Profilo | Newbie

Si tratta di un database di Acces, ho usato il generatore di query:

Select from...
where (auto.marca=?) and (auto.tipo=?) and (auto.targa=?)

alexmed Profilo | Guru

Allora prova a sostituire il % con l'* (asterisco)
alexmed

Antoniuccio Profilo | Newbie

Ho provato anche con quello, ma penso che tutti i valori che io possa passare ai parametri, inclusi quelli concatenati con l'operatore &, vengano passati ad access sotto forma di stringa e quindi non li riconosce. Provavo ad usare l'operatore LIKE in questo modo:

... where (Auto.marca= ? or auto.marca like '%') ma niente, in questo caso non filtra, mi restituisce sempre tutte le righe, mentre se sostituisco like '%' con like '*', non mi restituisce nessuna riga... c'è un articolo interessante a questo link, in proposito:

http://office.microsoft.com/it-it/access/HP051885341040.aspx

è vicinissimo al problema, ma non ci siamo ancora...

alexmed Profilo | Guru

Ciao
Ti allego un progettino base.


Fammi sapere

alexmed

Antoniuccio Profilo | Newbie

Perfetto, grazie per l'aiuto, stavo giocherellando con l'operatore like ma non avevo pensato di sostituirlo all '='. Ho risolto! Ora però non mi riesce lo stesso circa un intervallo di date, non conosco la sintassi per passare la data ad un parametro...:

where (x.data between ? and ?) and ..., solo che forse dovrei aggiungere un "#", con access funziona così #data#, ma il generatore di query non accetta il rispettivo #?#...

alexmed Profilo | Guru

Ti allego il progetto aggiornato
Ho anche inserito una query che ti carica tutte le marche (SELECT DISTINCT) nella prima combo e quando selezioni una di queste nella seconda combo vengono caricati tutti i modelli.
Infine con il btnSCADENZA selezioni in base alle date.

Ciao


alexmed

Antoniuccio Profilo | Newbie

Allora, la funzione between ? and ? l'avevo impostata anch'io, avevo commesso un errore sul db, ossia avevo lasciato il campo 'data' al tipo string anzichè date... Grazie alexmed, mi sei stato davvero di grande aiuto!

Saluti, Antonio.

franksic Profilo | Newbie

Ciao, sono Francesco, un newbie
Scusate se mi intrometto nel trhead, ma ho visto la soluzione di alexmed e mi è sembrata interessante per
risolvere un problema che ho postato in un altro trhead (SELECT SU TABELLA E QUERY).
Per Alexmed
Pensi che sia possibile utilizzare la combobox, come nel tuo esempio, però non sulla stessa tabella
ma su un'altra tabella in relazione con quella visualizzata?
Cerco di spiegarmi meglio.
In una form per l'emissione di fatture vorrei utilizzare la combobox per effettuare la ricerca di tutte le fatture di un
cliente tramite la ragione sociale.
Credi che sia fattibile ?

Grazie

Francesco

alexmed Profilo | Guru

Ciao Francesco
Penso che sia fattibile, ma dovresti postare la struttura delle due tabelle e farmi un esempio pratico indicandomi i dati da visualizzare sulla combo e quelli che vuoi estrarre alla selezione della combo stessa.

Ciao
alexmed

franksic Profilo | Newbie

Ho postato tutto nel thread dal titolo SELECT SU TABELLA E QUERY.

ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5