25/05/09 7:35
satriano
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.
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
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 25/05/09 7:37
aaa
25/05/09 8:21
theprogrammer
Poco prima della While inserisci solamente la
List1.Clear
aaa
25/05/09 10:38
satriano
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:
if text1.text="" then
list1.clear
end if
oppure con
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 25/05/09 10:40
aaa
25/05/09 11:56
theprogrammer
Ma tu hai inserito del codice in un evento del textbox? E quale?
aaa
25/05/09 12:52
satriano
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.
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
Private Sub Form_Load()
List1.Clear ' questo per avere da subito una listbox pulita
end sub
Ultima modifica effettuata da satriano 25/05/09 12:56
aaa
25/05/09 14:23
theprogrammer
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
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 ...
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 25/05/09 14:25
aaa
25/05/09 21:57
theprogrammer
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 ...
forum.masterdrive.it/visual-basic-6-17/vb6-rilevare-textbox-vuoto-39600/
... cosi' non si capisce nulla ... comunque, buon lavoro ...
Ultima modifica effettuata da theprogrammer 25/05/09 21:58
aaa