Newsgroup: it.comp.appl.access
Titolo: Aggiornamento..

Ho associato a svariati eventi una routine che fa qualcosa del genere:
dim nome as recordset
set nome=currentdb.openrecordset("tabella",dbopendynaset)
nome!campo= "111"
nome.update
nome.close
set nome=nothing
Lavoro in ambiente multiutente con vari FE installati sulle macchine e un
solo BE.
In pratica sembra che non sempre il record venga aggiornato in tabella,
anche se lo vado a leggere dopo tempo...
L'unica maniera sembra chiudere e riaprire access o il form.
E' chiaro che non vorrei fare nessuna delle due cose...
Ho provato anche aggiungendo dbseechanges o ad inserire un requery dopo
l'update.
Come posso fare a forzare la scrittura?

 E' chiaro che non vorrei fare nessuna delle due cose...
Ma se hai una form che punta alla tabella ti basta scrivere in un controllo
associato al campo no?
Antonio

 associato al campo no?
Che intendi per controllo "associato al campo"? Aggiungo qualche altra
informazione utile per capire il problema.
All'apertura della tabella eseguo un movefirste relativo edit oppure un
addnew.
Il form non č associato a nessuna tabella. Ho due tasti, uno che salva e
l'altro che riapre la tabella e aggiorna le caselle di testo nel form con
quello che legge dalla tabella.
Ho provato anche con nome.Update , True
Che ne dici? Sono io che voglio troppo?

 Che ne dici? Sono io che voglio troppo?
Ma hai mai sentito parlare di maschera associata ad una tabella?
il tuo modo di agire, via codice, va bene se non hai intenzione di aprire
alcuna maschera.
Ma se lo fai perchč non la usi per agire direttamente nella tabella, ma con
interfaccia maschera...
Antonio

 interfaccia maschera...
Certo che ne ho sentito parlare, ma per la complessità del form ho necessità
di aprire più tabelle, quindi non posso associare un bel niente!
Quella che ho trascritto è solo una versione ridotta, cui ho ommesso solo i
findfirst.

 findfirst.
Dopo l'aggiornamento del recordset con update, devi avere per forza i nuovi
valori.
Se non li hai c'è qualche problema nel codice.
Avendolo omesso, non è possibile evincere il problema
Antonio

Allora, questo è il codice che viene eseguito ad ogni variazione è questo.
Non mi sembra ci siano errori, visto che access non mi dice niente.
In pratica il primo conteggio riesce, poi se un'altra persona da un altro FE
effettua modifiche, quest'ultime non sono risportate.
Dim originereport As Recordset
Set originereport = CurrentDb.OpenRecordset("Report", dbOpenDynaset)
'verifica se c'è già un record di quella persona
originereport.MoveFirst
originereport.FindFirst "[Data] = #" & Format(Date, "yyyy-mm-dd") & "# AND
[Operatore] = '" & Forms!Generale!User & "'"
If originereport.NoMatch Then
    originereport.AddNew
    originereport!Data = Date
    originereport!Operatore = Forms!Generale!User
Else
    originereport.Edit
End If
'aggiorna i campi con quello che ha scritto
originereport!campo1 = Me.campo1
originereport!campo2 = Me.campo2
originereport!campo3 = Me.campo3
originereport!campo4 = Me.campo4
originereport.Update
originereport.Requery
originereport.Close
Set originereport = Nothing
'inizia il conteggio dei totali
Dim RecordOggi As QueryDef
Dim TabRecord As Recordset
Dim Varcampo1, Varcampo2, Varcampo3, Varcampo4
Set RecordOggi = CurrentDb.CreateQueryDef("")
RecordOggi.SQL = "SELECT * FROM Report WHERE (((Report.Data)= #" &
Format(Date, "yyyy-mm-dd") & "#));"
Set TabRecord = RecordOggi.OpenRecordset
Varcampo1= 0
Varcampo2= 0
Varcampo3= 0
Varcampo4= 0
TabRecord.MoveLast
TabRecord.MoveFirst
Do While Not TabRecord.EOF
        Varcampo1 = Varcampo1 - TabRecord!campo1
        Varcampo2 = Varcampo2 + TabRecord!campo2
        Varcampo3 = Varcampo3 + TabRecord!campo3
        Varcampo4 = Varcampo4 + TabRecord!campo4
    TabRecord.MoveNext
Loop
'visualizza i risultati del conteggio
Me.form.campo1 = Varcampo1
Me.form.campo2 = Varcampo2
Me.form.campo3 = Varcampo3
Me.form.campo4 = Varcampo4
TabRecord.Close
Set TabRecord = Nothing
RecordOggi.Close
Set RecordOggi = Nothing

 ha scritto nel messaggio
news:PDeV9.7759$ZE.2...@twister2.libero.it...

In effetti sembra tutto ok.
Hai provato ad effettuare un po' di debugging passo passo?
Antonio

Diciamo che ho risolto...
Avendo nella pagina generale una struttura a schede ed essendo quel codice
inserito in una sottoform di una della pagine della struttura, ho inserito:
Me.Requery
Me.Recalc
Me.Refresh
all'evento change del controllo struttura a scheda.
Ora in effetti funziona, ma la maschera si aggiorna tre volte ad ogni
cambio... non è un bel vedere.
Per i ritardi causati da queste righe ho paura che (visto che sono in
multiutente) si verifichino frequenti errori sulle tabelle.
Corro questo rischio Grande Biso?
Ciao e grazie, Iva.no.

 ha scritto nel messaggio
news:l_uV9.10292$ZE.2...@twister2.libero.it...

Beh, gli errori possono essere solo quelli del mancato aggiornamento dei
dati, ma dovrebbe dirtelo comunque.
Direi che però ti è sufficiente la requery, che provoca anche quello che
fanno gli altri due metodi
Antonio