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
Visual Basic 6 - (vb6)Azzera listbox dopo visualizzazione dato
Forum - Visual Basic 6 - (vb6)Azzera listbox dopo visualizzazione dato

Avatar
satriano (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/05/2009

Segnala al moderatore
Postato alle 9:35
Lunedì, 25/05/2009
Buongiorno
Non c'é due senza tre e quindi ritorno con un piccolo problema di sintassi.
Dopo che era stato risolto un mio precedente topic, mi sono ritrovato con un piccolo problema.

Seguendo il consilglio di Grilo ho inserito una listbox per visualizzare i dati di un database access
OK, tutto perfetto.
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command1_Click()
  2. While rs.EOF = False
  3.     If rs("VALORE").Value = val(text1.text) Then
  4.        list1.additem rs("TESTO").value
  5.     End If
  6.     rs.MoveNext
  7. Wend
  8. End Sub


Sennonché dopo aver  visualizzato il dato la list box resta con quel dato;
IO vorrei invece che che all'inserimento di
un nuovo VALORE la list box venga svuotata
onde permettere la visione del nuovo dato

Ho provato con

Codice sorgente - presumibilmente Plain Text

  1. list1.value=0
  2. list1.additem.value=vbNull
  3. list1.clear


ma non mi pulisce la listbox ed é sbaglaita la sintassi. E nemmeno  é chiaro dove inserire questo comando
O forse dovrei azzerare la variabile VALORE ?

grazie
satriano



Ultima modifica effettuata da satriano il 25/05/2009 alle 9:37
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 10:21
Lunedì, 25/05/2009
Poco prima della While inserisci solamente la

List1.Clear

PM Quote
Avatar
satriano (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/05/2009

Segnala al moderatore
Postato alle 12:38
Lunedì, 25/05/2009
Grazie, the programmer.
Il tuo tip pulisce infatti la list box. E' perfetto.
ma....ho notato un fatto imprevisto:

Supponiamo che io inserisca 1 nel text1.box (valore)
allora mi vengono mostrati i dati corrispondenti ad 1 del database.
E dunque é ok.

Supponiamo adesso che io con delete azzeri il text1.text ,quindi cancelli l'1,
per inserire un'altro valore, per esempio 3, allora
in questo tempo tra il cancellare e l'inserimento di un nuovo valore,
la list box mostra TUTTI gli elementi presenti nel database (TESTO).

Si potrebbe evitare questo ? Cioé cancellando il VALORE immesso, l list box dovrebbe
pulirsi senza nulla mostrare, fino ad inserimento nuovo VALORE.

Ho provato ovviamente con:

Codice sorgente - presumibilmente Delphi

  1. if text1.text="" then
  2. list1.clear
  3. end if


oppure con
Codice sorgente - presumibilmente VB.NET

  1. if rs.EOF = False then
  2. list1.clear
  3. end if



Se proprio non é posibile, va ugualmente bene. Grazie per l'intervento
satriano

Ultima modifica effettuata da satriano il 25/05/2009 alle 12:40
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:56
Lunedì, 25/05/2009
Ma tu hai inserito del codice in un evento del textbox? E quale?

PM Quote
Avatar
satriano (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/05/2009

Segnala al moderatore
Postato alle 14:52
Lunedì, 25/05/2009
Ho solo messo il codice sotto l'evento change del textbox.(per comodità)
Ma pur se lo metto sotto Command1_Click() fa lo stesso effetto.


Ecco comunque tutto il mio codice.




Codice sorgente - presumibilmente VB.NET

  1. Private Sub Text1_Change()
  2.  
  3.  
  4. Set cn = New ADODB.Connection
  5. Set rs = New ADODB.Recordset
  6. Dim strConnection As String
  7.  
  8. strPercorsoDB = App.Path & "\Aldo.mdb"
  9. strConnection = "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPercorsoDB & ";;Jet OLEDB:Database Password="
  10. cn.Open (strConnection)
  11.          
  12. rs.Open "Select * FROM malattie", cn, 1 ' nome tabella
  13.  
  14. List1.Clear
  15. While rs.EOF = False
  16.  
  17. On Error Resume Next
  18.     If rs("Valore").Value = CDbl(Text1.Text) Then
  19.               List1.AddItem rs("Testo").Value
  20.     End If
  21.     rs.MoveNext
  22. Wend



Ripeto, ho provato anche sotto Command1_Click() e fa lo stesso.
satriano
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2. List1.Clear ' questo per avere da subito una listbox pulita
  3. end sub


Ultima modifica effettuata da satriano il 25/05/2009 alle 14:56
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:23
Lunedì, 25/05/2009
Postato originariamente da satriano:
Testo quotato


Ho solo messo il codice sotto l'evento change del textbox.(per comodità)



Non ha senso inserirlo nell'evento change. Se usi un pulsante per la tua ricerca e' bene inserirlo nel command1_click

Testo quotato

Ma pur se lo metto sotto Command1_Click() fa lo stesso effetto.



Beh ... ovviamente dovrai modificare il codice, ma va messo nel in questo evento ...

Prima di tutto, la connessione e la open non vanno fatte sempre in questo evento ogni volta che devi fare una ricerca, ma nella Load.

Ovviamente nella Unload dovrai inserire la Close.

Quindi

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2.   List1.Clear ' questo per avere da subito una listbox pulita
  3.   Set cn = New ADODB.Connection
  4.   Set rs = New ADODB.Recordset
  5.   Dim strConnection As String
  6.  
  7.   strPercorsoDB = App.Path & "\Aldo.mdb"
  8.   strConnection = "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPercorsoDB & ";;Jet OLEDB:Database Password="
  9.   cn.Open (strConnection)
  10. End Sub



e poi va fatta la ricerca corretta nel Command1_Click, utilizzando una WHERE nella SELECT e non il ciclo ...


Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command1_Click()
  2.    List1.Clear
  3.    
  4.    If(Len(Text1.Text)>0) Then
  5.      rs.Open "SELECT * FROM malattie WHERE Valore=" & CStr(CDbl(Text1.Text)), cn, 1
  6.  
  7.      While Not rs.EOF
  8.         List1.AddItem rs("Testo").Value
  9.         rs.MoveNext
  10.      Wend
  11.  
  12.      rs.Close
  13.    End If
  14. End Sub




Ultima modifica effettuata da theprogrammer il 25/05/2009 alle 16:25
PM Quote
Avatar
satriano (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/05/2009

Segnala al moderatore
Postato alle 16:56
Lunedì, 25/05/2009
acc. Il codice é stato quasi del tutto modificato.
Ma ho capito per fortuna il tuo ragionamento.

Ho inserito comunque il tutto, eliminando il vecchio codice.

Non posso dire ancora se va bene o no, in quanto ricevo, inspiegabilmente
errore 424 riferito a
Codice sorgente - presumibilmente Visual Basic 6

  1. rs.Open "Select * FROM malattie WHERE Valore=" & CStr(CDbl(Text1.Text)), cn, 1



eppure il text1.box é li presente.
Ovviamente non avendo tu il database non hai potuto testare il tutto.

Cerchero' di capirci qualcosa e correggere.
In caso di necessità torno ovviamente.

Grazie per l'aiuto e per il codice. Ripeto, se necessario (spero di no) ritorno.

Voglio controllare il tutto poiché mi piace anche sapere perfettamente quello che sto facendo.

grazie
satriano

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 23:57
Lunedì, 25/05/2009
Testo quotato

Postato originariamente da satriano:

acc. Il codice é stato quasi del tutto modificato.
Ma ho capito per fortuna il tuo ragionamento.

Ho inserito comunque il tutto, eliminando il vecchio codice.

...

Grazie per l'aiuto e per il codice. Ripeto, se necessario (spero di no) ritorno.

Voglio controllare il tutto poiché mi piace anche sapere perfettamente quello che sto facendo.



Beh ... satriano (o titanic ...) ... vedo che stai ragionando sul problema altrove ...

http://forum.masterdrive.it/visual-basic-6-17/vb6-rilevare ...

... cosi' non si capisce nulla ... comunque, buon lavoro ...

Ultima modifica effettuata da theprogrammer il 25/05/2009 alle 23:58
PM Quote