__BlackworM__ (Member)
Pro
Messaggi: 110
Iscritto: 16/08/2008
|
Come da titolo mi succede una cosa molto strana, anzitutto vi posto il codice :
Codice sorgente - presumibilmente VB.NET |
cn.Open() Dim command As New OleDbCommand("select 'prezzo' from antipasti where nome='" & lb.SelectedItem.ToString & "'", cn) Dim reader As OleDbDataReader reader = command.ExecuteReader While reader.Read lb.Items.Add(reader("prezzo").ToString & vbCrLf) End While cn.Close()
|
il codice si collega ad un database access va a fare una query e seleziona dalla tabella antipasti e DOVREBBE prendere il prezzo del prodotto selezionato, quando sostituisco il lb (che sta per listbox) con il nome del prodotto va tutto bene ma se il codice resta così non mi estrae il prezzo di niente e quindi stringa vuota, come posso fare in modo che dato un nome dalla listbox mi va a fare una query di selezione prezzo in base al nome selezionato ?
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Non capisco cosa significhi "se resta così". Vuoi dire che funziona solo la prima volta e le successive no?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
Non è che abbia capito tanto il senso del tuo post ma nella SELECT il nome del campo non va tra apici. Deve essere
SELECT prezzo FROM antipasti WHERE ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
__BlackworM__ (Member)
Pro
Messaggi: 110
Iscritto: 16/08/2008
|
Postato originariamente da nessuno:
Non è che abbia capito tanto il senso del tuo post ma nella SELECT il nome del campo non va tra apici. Deve essere
SELECT prezzo FROM antipasti WHERE ... |
allora mi spiego meglio, se invece di listbox.selectedItem.tostring scrivo direttamente il nome del record ad esempio where nome='nome' da cercare va bene se invece scrivo where nome= selecteditem.tostring mi restituisce un insieme vuoto nella listbox è tutto fatto bene la query è corretta perchè testata in access direttamente insomma è un fatto molto strano...
altri dettagli :
io ho una tabella con campi id,nome,prezzo e voglio estrarre il prezzo che abbia come nome l'elemento scelto dall'utente e quindi se nella listbox ho un elemento chiamato pasta cliccando mi deve stampare con msgbox il prezzo... |
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
A parte il fatto che ti ho gia' detto (gli apici nel nome del campo), controlla che il dato contenuto nella listbox sia maiuscolo/minuscolo cosi' come è nel database e che non contenga spazi aggiuntivi.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
balto (Ex-Member)
Rookie
Messaggi: 44
Iscritto: 03/11/2009
|
Prova questo:
Codice sorgente - presumibilmente VB.NET |
cn.Open() Dim command As New OleDbCommand("Select 'prezzo' from antipasti where nome=@NOME", cn) command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString Dim reader As OleDbDataReader reader = command.ExecuteReader While reader.Read lb.Items.Add(reader("prezzo").ToString & vbCrLf) End While cn.Close()
|
Ultima modifica effettuata da balto il 27/01/2010 alle 22:44 |
|
__BlackworM__ (Member)
Pro
Messaggi: 110
Iscritto: 16/08/2008
|
Postato originariamente da balto:
Prova questo:
Codice sorgente - presumibilmente VB.NET |
cn.Open() Dim command As New OleDbCommand("Select 'prezzo' from antipasti where nome=@NOME", cn) command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString Dim reader As OleDbDataReader reader = command.ExecuteReader While reader.Read lb.Items.Add(reader("prezzo").ToString & vbCrLf) End While cn.Close()
|
|
Niente da fare ancora non và, adesso posto il codice completo :
Codice sorgente - presumibilmente VB.NET |
Private Sub lb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb.SelectedIndexChanged Dim stringaconn As String = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=sagra.mdb" Dim cn As New OleDbConnection(stringaconn) cn.Open() Dim command As New OleDbCommand("select prezzo from antipasti where nome=@NOME", cn) command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString Dim reader As OleDbDataReader reader = command.ExecuteReader While reader.Read lb.Items.Add(reader("prezzo").ToString & vbCrLf) End While cn.Close() End Sub
|
ok adesso se sostituisco questo :
select prezzo from antipasti where nome=@NOME
con questo
select prezzo from antipasti where nome='cocktail di gamberi'
mi aggiunge alla listbox il valore che voglio e cioè il prezzo del cocktail di gamberi se invece metto listbox.selectedItem.ToString niente da fare mi da un insieme vuoto facendo stampare a video il valore reader.Read()
mi stampa false come se non ritornasse ne ìssun valore e quindi non è true...
come fare...
eppure tutto mi sembra corretto... |
|
__BlackworM__ (Member)
Pro
Messaggi: 110
Iscritto: 16/08/2008
|
Postato originariamente da nessuno:
A parte il fatto che ti ho gia' detto (gli apici nel nome del campo), controlla che il dato contenuto nella listbox sia maiuscolo/minuscolo cosi' come è nel database e che non contenga spazi aggiuntivi. |
non ci sono errori anche perchè la listbox la riempio con lo stesso database e lo stesso sistema e quindi per questo è strano anzi posto anche il codice con cui riempio la listbox al load del form
Codice sorgente - presumibilmente VB.NET |
cn.Open() Dim command As New OleDbCommand("select * from antipasti", cn) Dim reader As OleDbDataReader reader = command.ExecuteReader While reader.Read lb.Items.Add(reader("nome").ToString & vbCrLf) End While cn.Close()
|
come notate è lo stesso codice a differenza che non metto una clausola where con un (listbox.selected.items).to.string |
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
Codice sorgente - presumibilmente Plain Text |
lb.Items.Add(reader("nome").ToString & vbCrLf)
|
Il problema è proprio quel vbCrLf che aggiunge (inutilmente) due caratteri alla stringa che, in fase di ricerca, non permettono di rintracciare il dato nel DB ... Deve essere
Codice sorgente - presumibilmente Plain Text |
lb.Items.Add(reader("nome").ToString)
|
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|