In questo caso specifico che il Rst di Loop è lo stesso da editare a mio avviso si sta facendo un discreto errore di concetto.
Questo il Codice proposto da [Jokman] che come si vede apre un Rst basato su tblFornitoriOrdiniDett, poi fa una Query Action di Update interna al Loop sempre su tblFornitoriOrdiniDett
Set Tabella = CurrentDb.OpenRecordset("tblFornitoriOrdiniDett", dbOpenSnapshot)
With Tabella
.FindFirst "IDOrdine=" & CInt(Forms!frmOrdini01!txtIDOrdine)
Do Until .EOF
Debug.Print !IDOrdineDett
If !Evaso = -1 Then
If !Quantita = !QtaEvasa Then
DBEngine(0)(0).Execute ("UPDATE tblFornitoriOrdiniDett SET [DataEvas]=" & CLng(DataEvas) & ", [DDTNr]='" & DDT & "' WHERE [IDOrdineDett]=" & !IDOrdineDett), dbFailOnError
End If
End If
.FindNext "IDOrdine=" & CInt(Forms!frmOrdini01!txtIDOrdine)
Loop
End With
Tabella.Close
Set Tabella = Nothing
Non è completamente insensato secondo voi…?
Apro il Rs filtrando subito i dati come suggerito sopra, e li edito mentre li ciclo… “WHAT ELSE”…?
Se penso sia lento inglobo il tutto in una TRANSAZIONE così lavoro in memoria ed accedo all'UpdateBatch in un solo colpo quando faccio il COMMIT.
' open recordset
Dim rs As DAO.Recordset
Set rs = DBEngine(0)(0).OpenRecordset("SELECT * FROM tuaTabella WHERE IDOrdine= & CInt(Forms!frmOrdini01!txtIDOrdine)
Do While Not rs.EOF
rs.Edit
![DataEvas]=CLng(DataEvas)
rs.Update
rs.MoveNext
Loop
Close
rs.Close
Set rs = Nothing
Con transazione:
Public Function XXX()...
Dim rs As DAO.Recordset
On Error Goto Err_Handler
Set rs = DBEngine(0)(0).OpenRecordset("SELECT * FROM tuaTabella WHERE IDOrdine= & CInt(Forms!frmOrdini01!txtIDOrdine)
rs.MoveFirst
DBEngine(0).BeginTrans
Do While Not rs.EOF
rs.Edit
![DataEvas]=CLng(DataEvas)
rs.Update
rs.MoveNext
Loop
DBEngine(0).CommitTrans
Exit_HEre:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Function
Err_Handler:
DBEngine(0).RollBack
Resume Exit_HEre
End Function
Saluti…