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 SubLa 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. |