Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Access e vb.net cosa molto strana
Forum - C# / VB.NET - [VB.NET] Access e vb.net cosa molto strana

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
__BlackworM__ (Member)
Pro


Messaggi: 110
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 3:47
Mercoledì, 27/01/2010
Come da titolo mi succede una cosa molto strana, anzitutto vi posto il codice :

Codice sorgente - presumibilmente VB.NET

  1. cn.Open()
  2.         Dim command As New OleDbCommand("select 'prezzo' from antipasti where nome='" & lb.SelectedItem.ToString & "'", cn)
  3.         Dim reader As OleDbDataReader
  4.         reader = command.ExecuteReader
  5.  
  6.         While reader.Read
  7.             lb.Items.Add(reader("prezzo").ToString & vbCrLf)
  8.         End While
  9.  
  10.         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 ?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:49
Mercoledì, 27/01/2010
Non capisco cosa significhi "se resta così". Vuoi dire che funziona solo la prima volta e le successive no?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:55
Mercoledì, 27/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à.
PM Quote
Avatar
__BlackworM__ (Member)
Pro


Messaggi: 110
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 15:11
Mercoledì, 27/01/2010
Testo quotato

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...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:02
Mercoledì, 27/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à.
PM Quote
Avatar
balto (Ex-Member)
Rookie


Messaggi: 44
Iscritto: 03/11/2009

Segnala al moderatore
Postato alle 22:32
Mercoledì, 27/01/2010
Prova questo:

Codice sorgente - presumibilmente VB.NET

  1. cn.Open()
  2.         Dim command As New OleDbCommand("Select 'prezzo' from antipasti where nome=@NOME", cn)
  3.         command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString
  4.         Dim reader As OleDbDataReader
  5.         reader = command.ExecuteReader
  6.  
  7.         While reader.Read
  8.             lb.Items.Add(reader("prezzo").ToString & vbCrLf)
  9.         End While
  10.  
  11.         cn.Close()


Ultima modifica effettuata da balto il 27/01/2010 alle 22:44
PM Quote
Avatar
__BlackworM__ (Member)
Pro


Messaggi: 110
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 23:32
Mercoledì, 27/01/2010
Testo quotato

Postato originariamente da balto:

Prova questo:

Codice sorgente - presumibilmente VB.NET

  1. cn.Open()
  2.         Dim command As New OleDbCommand("Select 'prezzo' from antipasti where nome=@NOME", cn)
  3.         command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString
  4.         Dim reader As OleDbDataReader
  5.         reader = command.ExecuteReader
  6.  
  7.         While reader.Read
  8.             lb.Items.Add(reader("prezzo").ToString & vbCrLf)
  9.         End While
  10.  
  11.         cn.Close()




Niente da fare ancora non và, adesso posto il codice completo :

Codice sorgente - presumibilmente VB.NET

  1. Private Sub lb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lb.SelectedIndexChanged
  2.  
  3.    Dim stringaconn As String = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=sagra.mdb"
  4.     Dim cn As New OleDbConnection(stringaconn)
  5.  
  6.         cn.Open()
  7.         Dim command As New OleDbCommand("select prezzo from antipasti where nome=@NOME", cn)
  8.         command.Parameters.Add("@NOME", OleDbType.VarChar).Value = lb.SelectedItem.ToString
  9.         Dim reader As OleDbDataReader
  10.         reader = command.ExecuteReader
  11.  
  12.         While reader.Read
  13.             lb.Items.Add(reader("prezzo").ToString & vbCrLf)
  14.         End While
  15.  
  16.         cn.Close()
  17.  
  18.     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...:hail:
eppure tutto mi sembra corretto...

PM Quote
Avatar
__BlackworM__ (Member)
Pro


Messaggi: 110
Iscritto: 16/08/2008

Segnala al moderatore
Postato alle 23:36
Mercoledì, 27/01/2010
Testo quotato

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

  1. cn.Open()
  2.         Dim command As New OleDbCommand("select * from antipasti", cn)
  3.         Dim reader As OleDbDataReader
  4.         reader = command.ExecuteReader
  5.  
  6.         While reader.Read
  7.             lb.Items.Add(reader("nome").ToString & vbCrLf)
  8.         End While
  9.  
  10.         cn.Close()



come notate è lo stesso codice a differenza che non metto una clausola where con un (listbox.selected.items).to.string

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 1:56
Giovedì, 28/01/2010
Codice sorgente - presumibilmente Plain Text

  1. 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

  1. 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à.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo