Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con controllo Data

Ciao a tutti, ho una semplice applicazione che sfrutta il controllo data per
interagire con un database Access. IL controllo risiede nel form1. Se
imposto alcune caselle di testo legandole con la proprietà datasource e
datafield tutto funziona alla perfezione, riesco a modificare, aggiungere e
eliminare i record. Quando invece agisco da un altro form tramite codice, il
codice viene eseguito ma il database non viene modificato!!! In
particolare...nel form3 ho 3 label, una textbox e un pulsante, quando premo
il pulsante il programma deve cercare un record che contiene gli stessi dati
delle label. Se lo trova si ferma e modifica l'ultimo campo inserendo il
valore della textbox. Se non lo trova aggiunge un nuovo record e inserisce
tutti i valori (quelli delle label e della text). Ora, il codice non da
nessun errore, viene eseguito fino alla fine. I controlli vengono eseguiti
correttamente, cioè se i valori delle label vengono trovato il programma
modifica, altrimenti aggiunge il nuovo record, questo vuol dire che riesce a
leggere correttamente dal database. Ma una volta terminata la sub il
database è rimasto invariato, sia che si tratti di modifica sia che si
tratti di aggiunta record! Questo è il codice del command1 che risiede nel
form3:
Private Sub Command1_Click()
Dim trovato As Boolean
trovato = False
Do While Form1.Data1.Recordset.EOF = False
If Form1.Data1.Recordset.Fields("mese") = Label3.Caption And
Form1.Data1.Recordset.Fields("giorno") = Label2.Caption And
Form1.Data1.Recordset.Fields("cognome_dipendente") = Label1.Caption Then
trovato = True
Exit Do
Else
Form1.Data1.Recordset.MoveNext
End If
Loop
If trovato = False Then
Form1.Data1.Recordset.MoveLast
Form1.Data1.Recordset.AddNew
End If
Form1.Data1.Recordset.Edit
Form1.Data1.Recordset.Fields("mese") = CStr(Label3.Caption)
Form1.Data1.Recordset.Fields("giorno") = Label2.Caption
Form1.Data1.Recordset.Fields("Cognome_dipendente") = Label1.Caption
Form1.Data1.Recordset.Fields("ore") = Text1.Text
Form1.Data1.Refresh
End Sub
Grazie in anticipo a chi mi vorrà aiutare

 Form1.Data1.Recordset.update
Salutoni
Sergio

 End Sub
con :
With form1.data1
do until .Recordset.EOF
    If .Recordset!["mese"] = Label3.Caption And  _
        .Recordset.Fields("giorno") = Label2.Caption And _
        .Recordset.Fields("cognome_dipendente") = Label1.Caption Then
            trovato = True
            Exit Do
    Else
        .Recordset.MoveNext
    End If
  Loop
end with
cosi  :
- i tasti della tua tastiera dureranno d+
- il codice si legge + facilmente
- puoi cambiare il nome all'oggeto data1 facilmente
- se crei routine standard puoi copiare&incollare e puoi usarle
semplicemente impostando il nome dell'oggetto data !

 per una questione di leggibilita' !
Come già detto io "aborro" l'until proprio perchè (secondo me) è
un'aberrazione in fatto di leggibilità: costringe a ragionamenti contorti e
in logica negativa per niente naturale per il cervello.
Detto questo, ogni espressione del tipo XXX = True puù essere semplicemente
tradotta in XXX (meno cose da leggere = più facile da leggere) mentre XXX =
False può diventare NOT XXX.
Questo evita al programma non solo una comparazione tra due valori, ma anche
la valutazione dell'espressione True.
Provare per credere! Non credevo nemmeno io che VB potesse essere tanto
stupido:
(x = True) è molto più lento di (x).
In breve, per fare un loop sul recordset:
Set rs = DB.OpenRecordset(...)
Do While (NOT rs.EOF)
    ...
    rs.MoveNext
Loop
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 False può diventare NOT XXX.
si anche io uso questa tipologia omettendo i compare, credevo pero' che
usare xxx=true fosse l'esplicito di xxx , e che quindi anche la velocita'
fosse la stessa , bha , misteri di vb !