Procedura ricerca con Query Sql!

martedì 15 luglio 2008 - 18.38

dosa85 Profilo | Junior Member

Salve a tutti sono nuovo del forum iscrittomi sotto indicazione si DoMa (mio amico).

Il mio quesito è il seguente:

Sto realizzando una piccola applicazione di Magazzino con vb.net 2005. Avviando il primo form (nell'evento load) mi carico in un datagridview tutte le colonne con le risettive righe del mio Database Access 2000 (dbmag.mdb). Fin qui tutto ok, ora vorrei effettuare una query di ricerca (tramite sql ed eventuale Button) nella colonna descrizone della stessa tabella.

---Ecco il codice---

Evendo Load del form:

Variabili pubbliche:
Dim dbcon As OleDb.OleDbConnection
Dim dbaDp As OleDb.OleDbDataAdapter
Dim inserisci As OleDb.OleDbDataAdapter
Dim datA As New DataSet

dbcon = New OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=c:\dbmag.mdb")
'Apre la connessione
dbcon.Open()
'Crea il DataAdapter: la stringa comunica di prelevare tutti i campi della tabella carico
dbaDp = New OleDb.OleDbDataAdapter("SELECT * FROM `carico`", dbcon)
'E tramite questo riempie il dataset
dbaDp.Fill(datA, "carico")
ComboBox1.DataSource = datA.Tables("carico")
ComboBox1.DisplayMember = "descrizione"
Dim table As DataTable = datA.Tables("Carico")
DataGrid.DataSource = table
DataGrid.AutoResizeColumns()

Tramite comano SQL:
Vorrei (per es.) ricercare il record in Descrizione col nome (peres.) "Birra".
E vorrei far aggiornare in modo istantaneo la datagrid in modo da farmi visualizzare se esiste solo il record che ha il nome "Birra".....credo di esse stato abbastanza chiaro.

!!!!!!!!!!!!!!!!!!!!!Grazie!!!!!!!!!!!!!!!!!!!!!!!!!!

alexmed Profilo | Guru

Ciao dosa85,
Se ho ben capito vorresti "filtrare" la tua DataGrid.
Per fare questo puoi utilizzare la funzione "BindingSource.Filter"

BindingSource.Filter = "Descrizione = 'Birra' "

Ti consiglio di dare un'occhiata qui:

http://msdn.microsoft.com/it-it/library/system.windows.forms.bindingsource.filter.aspx

Oppure esegui una query come quella col cui carichi la datagrid mettendogli le varie clausole DISTINCT, WHERE ect

dbaDp = New OleDb.OleDbDataAdapter("SELECT Desrizione FROM myTable WHERE Descrizione = Birra", dbcon)

Ciao

dosa85 Profilo | Junior Member

Ho seguito il tuo cons. ma mi
accade una cosa strana:
questo è il Codice su un button:

dbaDp = New OleDb.OleDbDataAdapter("SELECT Descrizione FROM carico WHERE Descrizione='" & ComboBox1.Text & "'", dbcon)
dbaDp.Fill(datA, "carico")
Dim table As DataTable = datA.Tables("Carico")
ComboBox1.DataSource = datA.Tables("carico")
ComboBox1.DisplayMember = "descrizione"
DataGrid.DataSource = table
DataGrid.AutoResizeColumns()


Guarda questa img!

[URL=http://img373.imageshack.us/my.php?image=esempiosu8.jpg][IMG]http://img373.imageshack.us/img373/763/esempiosu8.th.jpg[/IMG][/URL]

alexmed Profilo | Guru

Ciao
Non mi è chiara solo una cosa
Tutto il codice è nell'evento click del Button?

Perchè dovrebbe essere (se ho capito bene):

Nell'evento load del Form carichi tutte le descrizioni sulla ComboBox
Nell'evento Change della ComboBox (oppure un Button) vai ad effettuare la query di selezione e solo in questo momento carichi i dati (i risultati del "filtro" WHERE = )sulla DataGrid

E' cosi?

Ciao

dosa85 Profilo | Junior Member

Ho fatto così:

Evendo Load del form:

Variabili pubbliche:
Dim dbcon As OleDb.OleDbConnection
Dim dbaDp As OleDb.OleDbDataAdapter
Dim inserisci As OleDb.OleDbDataAdapter
Dim datA As New DataSet

dbcon = New OleDb.OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=c:\dbmag.mdb")
'Apre la connessione
dbcon.Open()
'Crea il DataAdapter: la stringa comunica di prelevare tutti i campi della tabella carico
dbaDp = New OleDb.OleDbDataAdapter("SELECT * FROM `carico`", dbcon)
'E tramite questo riempie il dataset
dbaDp.Fill(datA, "carico")
ComboBox1.DataSource = datA.Tables("carico")
ComboBox1.DisplayMember = "descrizione"
Dim table As DataTable = datA.Tables("Carico")
DataGrid.DataSource = table
DataGrid.AutoResizeColumns()








Nell' Evento click del button invece solo quello che ho scritto nel form prcedente! vale a dire:

dbaDp = New OleDb.OleDbDataAdapter("SELECT Descrizione FROM carico WHERE Descrizione='" & ComboBox1.Text & "'", dbcon)
dbaDp.Fill(datA, "carico")
Dim table As DataTable = datA.Tables("Carico")
ComboBox1.DataSource = datA.Tables("carico")
ComboBox1.DisplayMember = "descrizione"
DataGrid.DataSource = table
DataGrid.AutoResizeColumns()

alexmed Profilo | Guru

Ciao

Scusa ma ho cambiato qualcosa (per semplicità mia):

Varabili pubbliche:

Dim Connection As OleDb.OleDbConnection
Dim mCommand As OleDb.OleDbCommand
Dim mAdapter As OleDb.OleDbDataAdapter
Dim mTable As DataTable

Nell'evento Load del Form:

Private Sub Form1_Load()

Connection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\dbmag.mdb")
Connection.Open()
mCommand = New OleDbCommand("SELECT * FROM carico", Connection)
mAdapter = New OleDbDataAdapter()
mAdapter.SelectCommand = mCommand
mTable = New DataTable()
mAdapter.Fill(mTable)
Me.ComboBox1.DataSource = Me.mTable
Me.ComboBox1.DisplayMember = "Descrizione"
Me.DataGrid.DataSource = Me.mTable
Connection.Close()
End Sub

E questo nell'evento Changed della Combo oppure nell'evento Click del Button

Private Sub ComboBox1_SelectedIndexChanged

Connection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\dbmag.mdb")
Connection.Open()
mCommand = New OleDbCommand("SELECT * FROM carico WHERE Descrizione = '" & ComboBox1.Text & "'", Connection)
mAdapter = New OleDbDataAdapter()
mAdapter.SelectCommand = mCommand
mTable = New DataTable()
mAdapter.Fill(mTable)
Me.DataGrid.DataSource = Me.mTable
Connection.Close()

End Sub

E' possibile che qualcosa sia da adattare perchè l'ho testato su VB 2005 con un db Access che avevo (non ho access)

Ciao

dosa85 Profilo | Junior Member

***********OK*********** Grazie mille, problema risolto!!!
Avevo un'ultima domanda per ora e cioè volevo sapere qual'è la differenza fra il procedimento che hai descritto tu e quello che facevo io? Fra le variabili ne usi alcune che io non usavo, che diff. ce tra le mie variaili e le tue?????? e fra il mio procedimento e il tuo?

alexmed Profilo | Guru

Ciao
Se te lo dicessi dopo dovrei ucciderti!!!!!

A parte gli scherzi, ci sono nella tua due cose che non mi piacciono

La prima e che carichi due volte (nel load del form e nel Click del Button) le query sia nella Combo sia nel DataGrid

La seconda e qui:

dbaDp.Fill(datA, "carico")
ComboBox1.DataSource = datA.Tables("carico")
e
DataGrid.DataSource = table

?????

Non riuscendo a capire come caricavi su i dati e non sapendo se c'erano altre parti di codice ho preferito "ricominciare" da zero secondo gli schemi che uso io (Access lo uso poco niente dal momento che lavoro con VB 2005 Express che ha integrato SQL Server 2005 Express)

Ciao

dosa85 Profilo | Junior Member

Perche non devo caricare nel combobox e nel datagrid?

alexmed Profilo | Guru

Mi sono spiegato male.
Con questa procedura in base al testo della Combo, "filtri" il contenuto della DataGrid
Mentre con la tua procedura, mi riferisco all'immagine che mi hai girato, non filtravi niente, anzi ti compariva una riga in più.
Giusto?
Questo era dovuto al fatto che caricavi sia nell'evento Load che Button le medesime query.

NB.
Non ho potuto testare le affermazioni sopra non avendo ne il tuo db Access ne VB 6.0 (ho dedotto che tu usi VB 6.0)

Tra l'altro ti volevo suggerire di inserire (se ne hai bisogno) un eventuale Button2 che ricarica la query (SELECT * FROM carico) per rivedere tutti gli articoli nel DataGrid
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5