Condividi tramite

Compattare database in rete da programma esterno

Anonimo
2015-01-15T12:53:25+00:00

Buongiorno a tutti, leggendo libri specifici di Access ( in questo caso Access 2010 della Hoepli informatica) e seguendo le varie discussioni su questo forum aventi analogo quesito ho pensato di adattare il codice allegato ( indicato dall'esperto della community Eulero) per il mio database scegliendo ( per i motivi dai più esperti indicati) la via della compattazione da programma esterno, ma si verifica che, per la prima volta mi compatta il  Database bene e me lo indica con un MSGBOX, ma alle successive riaperture  e chiusure dello stesso database da compattare (con il codice sottostante abbinato ad un pulsante di comando creato con un altro file di Access che utilizzo per tale scopo) mi dà l'errore che vi segnalo:

Errore n°7847: MIcrosoft Access:'Compact_esiste già. E' necessario creare una copia di backup del file prima di eseguire l'operazione di ripristino. Immettere un nome per il file di Backup.

Questo è il codice che mi compatta il database da file Access esterno:

Private Sub Comando0_Click()

    On Error GoTo CompactDB_Err

    DoCmd.Hourglass True

     If Application.CompactRepair( _

        LogFile:=True, _

        SourceFile:="C:\XXXXXX\PippoPluto\Desktop\MULETTO .accdb", _

        DestinationFile:=Left(db, InStrRev(db, "")) & "Compact_" & _

        Right(db, Len(db) - InStrRev(db, ""))) Then

        DoCmd.Hourglass False

        MsgBox "Compattazione terminata!", vbInformation

    End If

CompactDB_Exit:

    Exit Sub

CompactDB_Err:

    DoCmd.Hourglass False

    MsgBox "Errore n° " & Err.Number & ": " & Err.Description, vbExclamation

    GoTo CompactDB_Exit

End Sub

Vi chiedo per cortesia di conoscere il tipo di errore che vi ho segnalato da cosa scaturisce, inoltre poichè il Database che a breve metterò in rete, multiutente dovrà contenere migliaia di dati è opportuno creare del codice che oltre alla compattazione mi crei una copia di backup e mi compili sempre il nuovo DB?

Grazie a tutti coloro che vorranno aiutrami in questo.

Ciao Nicola.

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
2015-01-15T15:32:22+00:00

Penso che tu debba dichiarare la variabile come string ed inizializzarla con il nome del DB access:

   DoCmd.Hourglass True

db="C:\XXXXXX\PippoPluto\Desktop\MULETTO .accdb"

     If Application.CompactRepair( _

        LogFile:=True, _

        SourceFile=db, _

        DestinationFile:=Left(db, InStrRev(db, "")) & "Compact_" & _

        Right(db, Len(db) - InStrRev(db, ""))) Then

        DoCmd.Hourglass False

        MsgBox "Compattazione terminata!", vbInformation

    End If

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-01-15T16:16:50+00:00

    Mimmo, ho risolto, il codice per la compattazione mi creava sul desktop una copia del Db ( ecco perchè mi segnalava la presenza del  DB compattato).

    Ora ho questo dubbio, sono impallato, ma in un discorso di rete, come viene gestito questo ( codice) su cui stiamo discutendo, perchè mi crea una copia ( ho notato che me lo rinomina pure).

    Maa questo mi potrebbe causare dei problemi dopo aver messo in rete il DB e averlo fatto utilizzare a più persone?

    Fammi capire per favore.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-01-15T16:03:42+00:00

    Mimmo, ho inizializzato la variabile con il nome del mio database reale e appena lanciato il codice mii ha compattato il db.

    Poi successivamente ho lavorato inserendo dati di prova sullo stesso database ( giusto per testarlo e simulare l'utilizzo quotidiano che il DB farà a breve) l'ho richiuso, ho aprto il file di access dal qial faccio partire il codice per la compattazione e mi ricompare il messaggio appaena postato:

     Errore n°7847: MIcrosoft Access:'Compact_esiste già. E' necessario creare una copia di backup del file prima di eseguire l'operazione di ripristino. Immettere un nome per il file di Backup.

    Ho provato a rinominare il file di Access da compatatre aggiungendo 1 alla fine del nome e mi compare un altro tipo di errore che mi dice che il Database è stato aperto da un altro utente in modalita' Esclusivo.

    Ho potato questo, se può esserti utile e facilitarti la comprensione del problema che verifico:

    Se il codice sistemato con l'ultimo tuo post lo lancio per la prima volta su un DB vergine ( chiamiamolo cosi,  mai provato a compattare con il codice de quo) tutto funziona me se riprovo altre volte mi dà : 

    Errore n°7847: MIcrosoft Access:'Compact_esiste già. E' necessario creare una copia di backup del file prima di eseguire l'operazione di ripristino. Immettere un nome per il file di Backup.

    Grazie ancora Mimmo.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-01-15T15:14:47+00:00

    Ciao Mimmo, grazie per il tuo intervento, ho fatto come tu mi segnali ed ho  dichiarato la variabile db cosi:

    Dim db as DAO.Database e lanciando il codice ho il seguente errore:  Errore di compilazione, tipo  non corrispondente ed il cursore si posiziona su InStrRev.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-01-15T14:44:08+00:00

    Ciao Nicola,

    come prime righe in qualsiasi modulo imposta:

    Option Compare Database

    Option Explicit

    dopo aver inserito le precedenti 2 righe,

    se provi a compilare il codice da te postato ti dirà che la variabile db non è stata dichiarata.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento