satriano (Normal User)
Newbie
Messaggi: 15
Iscritto: 13/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 |
Private Sub Command1_Click() While rs.EOF = False If rs("VALORE").Value = val(text1.text) Then list1.additem rs("TESTO").value End If rs.MoveNext Wend 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 |
list1.value=0
list1.additem.value=vbNull
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 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Poco prima della While inserisci solamente la
List1.Clear
|
|
satriano (Normal User)
Newbie
Messaggi: 15
Iscritto: 13/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 |
if text1.text="" then list1.clear end if
|
oppure con
Codice sorgente - presumibilmente VB.NET |
if rs.EOF = False then list1.clear 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 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Ma tu hai inserito del codice in un evento del textbox? E quale?
|
|
satriano (Normal User)
Newbie
Messaggi: 15
Iscritto: 13/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 |
Private Sub Text1_Change() Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Dim strConnection As String strPercorsoDB = App.Path & "\Aldo.mdb" strConnection = "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPercorsoDB & ";;Jet OLEDB:Database Password=" cn.Open (strConnection) rs.Open "Select * FROM malattie", cn, 1 ' nome tabella List1.Clear While rs.EOF = False On Error Resume Next If rs("Valore").Value = CDbl(Text1.Text) Then List1.AddItem rs("Testo").Value End If rs.MoveNext Wend
|
Ripeto, ho provato anche sotto Command1_Click() e fa lo stesso.
satriano
Codice sorgente - presumibilmente VB.NET |
Private Sub Form_Load() List1.Clear ' questo per avere da subito una listbox pulita end sub
|
Ultima modifica effettuata da satriano il 25/05/2009 alle 14:56 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da satriano:
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
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 |
Private Sub Form_Load() List1.Clear ' questo per avere da subito una listbox pulita Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Dim strConnection As String strPercorsoDB = App.Path & "\Aldo.mdb" strConnection = "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPercorsoDB & ";;Jet OLEDB:Database Password=" cn.Open (strConnection) 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 |
Private Sub Command1_Click() List1.Clear If(Len(Text1.Text)>0) Then rs.Open "SELECT * FROM malattie WHERE Valore=" & CStr(CDbl(Text1.Text)), cn, 1 While Not rs.EOF List1.AddItem rs("Testo").Value rs.MoveNext Wend rs.Close End If End Sub
|
Ultima modifica effettuata da theprogrammer il 25/05/2009 alle 16:25 |
|
satriano (Normal User)
Newbie
Messaggi: 15
Iscritto: 13/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 |
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
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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.
|
Ultima modifica effettuata da theprogrammer il 25/05/2009 alle 23:58 |
|