Azzerare contatore access db diviso.

Anonimo
2019-09-28T09:26:36+00:00

Buongiorno,

In un db non diviso utilizzo questo codice, suggeritomi a suo tempo da Sandro Peruz,  per azzerare due tabelle in relazione che funziona ottimamente.

Private Sub Comando0_Click()

With DBEngine(0)(0)

    .Execute "delete * from TblOperatori", &H80

    .Execute "delete * from TblFornitori", &H80

    .Execute "insert into TblClienti (IdCliente) values (0)", &H80

    .Execute "delete * from TblClienti", &H80

    .Execute "ALTER TABLE TblOperatori ALTER COLUMN idoperatore COUNTER(1)", &H80

    .Execute "ALTER TABLE TblFornitori ALTER COLUMN IdFornitore COUNTER(1)", &H80

End With

End Sub

Il medesimo codice vorrei impiegarlo in un database con tabelle divise anch’esse in relazione fra loro uno a molti.

In windows (C:) ho creato una cartella “Beck-End Beni Mobili Registrati” che contiene il file db con identico nome.

Quando da un pulsante posto su una maschera eseguo l’azzeramento ricevo questo messaggio di errore:

Con questo errore nel codice:

Con questo risultato:

-          La tabella “TblRegistroBeniMobili” si svuota ed il contatore access si azzera ed è pronto per ripartire da 1;

-          La tabella “TblVenditoriDebitoriDonanti”, si svuota ma il contatore access non si azzera conservando l’ultimo numero.

Ringrazio e saluto con rinnovata stima.

Abitante

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
2019-09-30T11:52:26+00:00

ciao Abitante,

infatti, sfuggiva a me l'integrita' referenziale, e giustamente una insert lato molti senza record correlato non ha regione di esistere.

Le relazioni io non le uso mai, tendo a normalizzare, ma non ad usare le relazioni.

ok l'integrita' referenziale e ok pure l'aggiornamento a catena, sarei invece molto piu' cauto sull'eliminazione a catena....anzi….non la userei proprio, ma vedi tu...!

per quanto al codice, basta variare come segue, posto solo il blocco with delle execute :

With dbs

    .Execute "delete * from TblRegistroBeniMobili", &H80

    .Execute "delete * from TblVenditoriDebitoriDonanti", &H80

    .Execute "insert into TblRegistroBeniMobili (IdRegistro) values (0)", &H80

    .Execute "insert into TblVenditoriDebitoriDonanti  (IdVendDonante) values (0)", &H80

    .Execute "delete * from TblRegistroBeniMobili", &H80

    .Execute "delete * from TblVenditoriDebitoriDonanti", &H80

End With

Ciao, Sandro.

La risposta è stata utile?

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

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-09-30T08:30:52+00:00

    Ciao Sandro Buongiorno,

    il file Be non ha altre impostazioni, è denominato e lasciato nella cartella documenti così come definito dal processo di divisione: Beni Mobili Registrati_Be.

    Ho provato a ripetere la divisione ma niente, ho sempre il problema solo sulla tabella "TblRegistroBeniMobili" che non si azzera.

    Grazie.

    Abitante

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-09-30T05:39:25+00:00

    ciao Abitante,

    non riesco a simulare il tuo problema nemmeno impostando valori predefiniti o vincoli particolari nei campi...

    Hai qualche altra impostazione nel BE che mi sfugge....?

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-09-29T22:30:26+00:00

    Ciao Sandro,

    con il primo codice con percorso e nomi delle tabelle propri del mio db, di cui all'immagine:

    • Quando premo il pulsante di azzeramento ottengo il messaggio "Tabelle azzerate" con contestuale click sonoro classico di un record bloccato.

    • la tabella "TblRegistroBeniMobili" non si svuota, è bloccata su "Zero" (da quì il click sonoro di cui sopra?).

    • la tabella "TblVenditoriDebitoriDonanti", si svuota ed azzera correttamente predisponendosi "Su nuovo"

    Ti ringrazio.

    Abitante

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-09-29T07:18:45+00:00

    ciao Abitante,

    setta una variabile oggetto che punti al database BE ed esegui le action queries :

    Private Sub btnAzzeraContatoriTabelle_Click()

    Dim dbs As dao.Database

    Const strPathBe As String = "tuoFullPath"  ' da peronsalizzare con nome completo db+estensione

    Set dbs = OpenDatabase(strPathBe)  

    With dbs

        .Execute "delete * from TblOperatori", &H80

        .Execute "delete * from TblFornitori", &H80

         .Execute "insert into TblOperatori(id) values (0)", &H80  ' personalizza id con il nome della PK

        .Execute "delete * from TblClienti", &H80

    .Execute "insert into TblFornitori(id) values (0)", &H80   ' personalizza id con il nome della PK

        .Execute "delete * from TblFornitori", &H80

    End With

    dbs.Close

    Set dbs = Nothing

    VBA.MsgBox prompt:="Tabelle azzerate!", _

                  buttons:=vbInformation + vbOKOnly, _

                  Title:="Informazione"

    End Sub

    oppure se vuoi fare un po' il fanatico ;-) :

    Private Sub btnAzzeraContatoriTabelle_Click()

    On Error GoTo errHandler

       Dim wrk     As dao.Workspace

       Dim dbs     As dao.Database

       Dim bool    As Boolean

       Const strPathBe As String = "tuoFullPath"  ' da peronsalizzare con nome completo db+estensione

       Set dbs = OpenDatabase(strPathBe)  

       Set wrk = CreateWorkspace("", "admin", "", 2) 'dbUseJet

       Set dbs = wrk.OpenDatabase(strPathBe)

       With wrk

        .BeginTrans

            With dbs

    .Execute "delete * from TblOperatori", &H80

    .Execute "delete * from TblFornitori", &H80

             .Execute "insert into TblOperatori(id) values (0)", &H80  ' personalizza id con il nome della PK

    .Execute "delete * from TblClienti", &H80

    .Execute "insert into TblFornitori(id) values (0)", &H80   ' personalizza id con il nome della PK

    .Execute "delete * from TblFornitori", &H80

              .Close

           End With

        .CommitTrans 1

        .Close

        bool = True

      End With

    ExitSub:

       Set wrk = Nothing

       Set dbs = Nothing

       VBA.MsgBox prompt:="Tabelle azzerate!", _

                  buttons:=vbInformation + vbOKOnly, _

                  Title:="Informazione"

       Exit Sub

    errHandler:

         With Err

           If bool = 0 Then wrk.Rollback

           MsgBox "ERR#" & CStr(.Number) _

                & vbNewLine & .Description _

                , vbOKOnly Or vbCritical, cstrProc

         End With

         Resume ExitSub

    End Sub

    ciao e buona domenica.

    Personalizza anche il nome delle tabelle per praticità ho ripreso quelle esposte dal codice e non dall'immagine.

    Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento