Oppure

Loading
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 14:56
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.

Non posso dire ancora se va bene o no, in quanto ricevo, inspiegabilmente
errore 424 riferito a
  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
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