Newsgroup: it.comp.lang.visual-basic
Titolo: CancelUpdate non annulla le modifiche

Ho un form con alcuni controlli associati ad una tabella di un database.
Se l'utente modifica il valore del testo e poi clicca su un tasto per
annullare le modifiche (che richiama il metodo CancelUpdate del recordset),
i valori dei controlli non vengono aggiornati con i dati originali.
Se invece uso un Recordset aperto con adLockBatchOptimistic e chiamo il
metodo CancelBatch tutto funziona correttamente.
Io pero' vorrei farlo funzionare anche con un recorsert non Batch e con il
metodo CancelUpdate.
Qualcuno mi sa aiutare?
Grazie.
Ciao
Skysurfer

 ha scritto nel messaggio
news:a9jhjq$d0h$1...@serv1.iunet.it...

Il metodo CancelUpdate funziona solo se richiamato prima della Update del
rs.
Associando direttamente i controlli della tua form con i campi del database,
la modifica viene effettuata seduta stante ed il metodo update viene
richiamato
implicitamente, rendendo inutile il tuo CancelUpdate.
Ciao
 valter

 ha scritto nel messaggio
news:a9jipg$83$1...@newsreader1.mclink.it...



[ cut ]
E' solo un problema di sincronizzazione dei dati che il cursore
ADO non ricostruisce dinamicamente. Esegui una requery sul
rs e vedrai che i valori sono uguali.
Quanto al fatto che non ti funziona la CancelUpdate, forse prima
non mi sono spiegato bene :
a prescindere dai controlli associati o meno, il metodo update di
ADO, se ci sono modifiche in sospeso, viene richiamato anche
semplicemente spostandosi su un'altro record  e che le modalità
di aggiornamento variano molto a seconda dei tipi di cursore
e della loro locazione, nonchè del tipo di blocco adottato per i records
selezionati.
Premesso questo, se modifichi i campi associati ai dati ( come
li hai associati? Che db usi? ) e non esegui nessun altro tipo di operazione
prima di lanciare la CancelUpdate, tranquillo che farà il suo lavoro,
deve farlo, altrimenti c'è qualcos'altro che in maniera occulta forza
l'aggiornamento prima che tu segnali di annullare le modifiche.
Dai una controllata al codice, vedrai che qualcosa salta fuori.
Ciao
 valter


In effetti credo di aver trovato dove sta il problema. Il recordset
associato ai controlli del form (uso SqlServer 2000 e li ho associati via
codice impostando le proprietà DataSource e DataField dopo aver creato il
recordset) è anche associato ad una griglia che serve per la sola
visualizzazione della tabella.
Ho provato a creare una copia del recordset con il metodo Clone e collegare
questo nuovo recordset ai controlli.
Cosi' sembra funzionare tutto, anche se comunque non mi sembra la soluzione
ideale avere due recordset identici per una scemata simile.
Hai qualche suggerimento? Grazie!
Skysurfer


[cut]
Grazie mille per i consigli.
In effetti la tua soluzione č quella che avevo pensato io all'inizio, anche
se io avevo pensato di eseguire le operazioni di
inserimento/modifica/cancellazione tramite sql senza utilizzare i metodi del
recordset.
Il problema principale č che sul form che permette la modifica DEVONO
esserci i tasti di navigazione che permettono di spostarsi sui record del
recordset.
Quindi non posso passare al form un record composto da un solo recordset.
Ahhhhh... che nervosooooooo!!!!!!!
Ho appena scoperto qual e' la vera causa dei miei problemi!!!
Il controllo TrueDbText di ComponentOne!!!
Ho provato a sostituire tutti questi maledetti controlli con delle
normalissime, bruttissime Text e tutto funziona!
Invece con quei maledetti TrueDbText chiamando CancelUpdate non viene
ripristinato il valore iniziale.
Che palleeeee...
Scusa per lo sfogo.
Skysurfer


Chi lascia la via vecchia per la nuova... :-)
Consolati.. proprio ieri, sulla ML di un altro sito che si occupa di VB,
abbiamo chiuso un altro thread chilometrico riguardante un problema
simile al tuo e dopo grande spreco di risorse si è scoperto che il
problema era un datacontrol di terze parti...
Ciao
 Valter