General

6.188 Sfruttare le transazioni per velocizzare le queries di comando
  Alessandro Baraldi
Quando si devono eseguire cicli un pò lunghi di aggiornamenti sia tramite recordset che tramite queries di comando è normale che le azioni inseriscano tempi di ritardo apprezzabili e fastidiosi.
Per velocizzare ed ottimizzare queste operazioni JET ci mette a disposizione l'uso del metodo transazionale.

In questo modo l'inserzione verrà eseguita tutta in un colpo al momento del Commit.

Nell'esempio che segue ho ipotizzato di avere in un DB esterno (BE) una tabella con 2 campi:il primo campo si chiama Numero ed è di tipo numerico intero lungo ed il secondo campo si chiama Anno ed anche lui è di tipo numerico intero lungo.

Il demo inserisce 80000 record; per valutare la differenza di prestazioni provate la sub così come è poi rieseguitela dopo aver disabilitato l'uso della Transazione.
Private Sub TestTransaction()
On Error GoTo Err_TestTransaction
Dim DB As DAO.Database
Dim n  As Integer	

Set DB = DBEngine.OpenDatabase("C:\Programmi\MioBE.mdb")

DBEngine.BeginTrans
For x = n To 80000
    DB.Execute "INSERT INTO NomeTabella (Numero, Anno) " & _
      "VALUES (" & x & "," & Year(now()) & ");"
Next
DBEngine.CommitTrans
MsgBox "Inseriti n. " & x - n

Exit_Here:
DB.close
Set DB=Nothing
Exit Sub

Err_TestTransaction:
DBEngine.Rollback
MsgBox Err.Description
Resume Exit_Here
End Sub
La sub di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97 aggiungeta tale libreria ai riferimenti del database.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.