Barra di avanzamento per aggiornamento massivo di records in tabella.

Anonimo
2018-12-13T10:11:43+00:00

Buongiorno a tutti.

Come faccio da molto tempo, chiedo il vostro aiuto per poter visualizzare , tramite la barra di stato, l'avanzare dell'operazione di aggiornamento ( utilizzando le transazioni) di migliaia di records in tabella come da codice seguente.

Spiego il mio progetto di prova che sto utilizzando per poter visualizzare nella barra di stato quanto chiedo.

  1. ho una tabella chiamata Tabella1 con 2 campi chiamati ( Numero e Anno).
  2. aggiorno tutti i record con l'anno attuale.

Private Sub TestTransazioni()

     On Error GoTo Err_TestTransaction

     Dim db As DAO.Database

     Dim n As Double

 'Mostra la clessidra

DoCmd.Hourglass True

     Set db = DBEngine.OpenDatabase("C:\Users\Desktop\UTILIZZO DELLE TRANSAZIONI .accdb")

     DBEngine.BeginTrans

     For X = n To 80000

     ' inizia il conteggio sulla barra di stato

SysCmd acSysCmdInitMeter, "Updating: ", X

         db.Execute "INSERT INTO Tabella1 (Numero, Anno) " & _

                             "VALUES (" & X & "," & Year(Now()) & ");"

SysCmd acSysCmdUpdateMeter, X

     Next

SysCmd acSysCmdRemoveMeter

     DBEngine.CommitTrans

    DoEvents

     MsgBox "Inseriti n. " & X - n

Exit_Here:

     db.Close

     Set db = Nothing

'Rimuovi la clessidra

DoCmd.Hourglass False

     Exit Sub

Err_TestTransaction:

     DBEngine.Rollback

     MsgBox Err.Description

     Resume Exit_Here

End Sub

Non riesco a visualizzare bene la percentuale di avanzamento nella barra di stato (come da immagine 1 allegata), la casella di testo riporta integralmente il colore di sfondo pieno e non accade nulla, mi aiutate a capire come correggere questo per ottenere quanto richiesto?

Spero di essere stato chiaro, ringrazio anticipatamente chi mi aiuta in questo.

Tutto il resto invece funziona benissimo, compreso l'aggiornamento dei records ed il messaggio finale.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-12-14T14:03:47+00:00

Ciao,

prova a sostituire il pezzo di codice che segue (in grassetto le modifiche):

DBEngine.BeginTrans

Ris = SysCmd(acSysCmdInitMeter, "Updating: ", 80000)

For X = n To 80000

' inizia il conteggio sulla barra di stato

db.Execute "INSERT INTO Tabella1 (Numero, Anno) " & _

"VALUES (" & X & "," & Year(Now()) & ");"

 Ris = SysCmd(acSysCmdUpdateMeter, X)

 DoEvents

Next

Ciao Mimmo

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-12-14T14:52:37+00:00

    Ciao Mimmo, ora funziona benissimo.

    Grazie per il tuo preziosissimo aiuto, alla prossima richiesta.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-12-13T18:04:52+00:00

    Ciao Mimmo, innanzitutto grazie per il tuo cortese intervento.

    Ho provato con i tuoi suggerimenti ma il problema è sempre lo stesso, cioè la barra di avanzamento non va ne' avanti ne' indietro.

    Allego il db di prova al seguente link: https://1drv.ms/u/s!Ali6qqOH3dOAjnnYtDiENMnGzKG1

    al fine di poter capire meglio come risolvere la problematica in argomento e poter usare la barra di stato per altre operazioni nel database finale, come ad esempio comadi sql per aggiornamento, eliminazione records ecc.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-12-13T15:59:36+00:00

    Ciao Nicola,

    dichiara in testa alla Sub

    Dim Ris as Variant

    quindi proviamo a cambiare:

    SysCmd acSysCmdInitMeter, "Updating: ", X

    in

    Ris = SysCmd(acSysCmdInitMeter, "Updating: ", X)

    SysCmd acSysCmdUpdateMeter, X

    in

    Ris=SysCmd(acSysCmdUpdateMeter, X)

    SysCmd acSysCmdRemoveMeter

    in

    Ris=SysCmd(acSysCmdRemoveMeter)

    Facci sapere

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento