Backup progressivi.

Anonimo
2017-08-26T20:37:37+00:00

Ciao,

facendo una ricerca in rete sono riuscito ad adattare il seguente codice per creare il backup del database.

In un modulo:

Declare PtrSafe Function apiCopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Sub CopyFile(SourceFile As String, DestFile As String)

       '---------------------------------------------------------------

       ' PURPOSE: Copy a file in use on disk from one location to another.

       ' ACCEPTS: The name of the source file and destination file.

       ' RETURNS: Nothing

       '---------------------------------------------------------------

       Dim Result As Long

         If Dir(SourceFile) = "" Then

            MsgBox Chr(34) & SourceFile & Chr(34) & _

               " is not valid file name."

         Else

            Result = apiCopyFile(SourceFile, DestFile, False)

         End If

End Sub

In un pulsante:

Call CopyFile(CurrentProject.Path & "\Database.mdb", CurrentProject.Path & "\CopiaDatabase.mdb")

Quello che a me servirebbe, è creare ad ogni click del pulsante un backup nuovo, cioè che non si vada a sovrapporre a quello già esistente.

Ad esempio CopiaDatabase1, CopiaDatabase2, CopiaDatabase3 ecc...

Vladimiro

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

44 risposte

Ordina per: Più utili
  1. Anonimo
    2017-08-28T13:09:42+00:00

    Ciao Mimmo,

    D'accordissimo con te, nel mio caso c'erano dei limiti.

    Avevo una partizione di uno dei server. C'era la cartella "Access" e le sottocartelle Applicazione1, Applicazione2, ApplicazioneN.

    Per ogni cartella ApplicazioneX avevo creato delle sottocartelle: Backup, Report, Files, Temp.

    Per il backup generale, non avevo problemi dato che era previsto a livello IT come qualsiasi altro server.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-08-28T13:03:04+00:00

    Ciao a tutti e bentornati (io perlomeno rientro oggi :-)

    aggiungerei che sarebbe opportuno effettuare il BackUp su un'altro drive ( meglio ancora un'altro supporto).

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-08-28T12:00:28+00:00

    Ciao Vladimiro,

    Se vuoi fare il bkp solamente all'uscita. Puoi inserire il codice in una routine che verrà chiamata al momento della chiusura dell'applicazione. 

    Per fare questo crei una maschera vuota, la apri nascosta in apertura dell'applicazione e chiami la routine nell'evento close della form (metodo non elegante ma efficace). Quando l'utente chiuderà l'applicazione, chiuderà anche la form e quindi partirà il bkp.

    Per avere il bkp progressivo e non sovrascrivere, io uso questa semplice istruzione per avere il nome del file e copio il tutto nella cartella Backup che tengo nella cartella del progetto:

    wBckFile = CurrentProject.Path & "\Backup" & "Backup_" & Date & "_" & Time & "_" & CurrentProject.Name

    L'ho creato per una delle più grosse assicurazioni canadesi e lo usano da anni, sembra che sia abbastanza rodato come sistema... Se vuoi ti posso dare anche il codice VBA, sono solo una ventina di righe

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-08-27T22:45:31+00:00

    ciao Vladimiro,

    piccolo riepilogo.

    La soluzione che ho provato ad indicarti la puoi estendere a tutti i databases compreso quello in uso.

    Il Backup solitamente si fa ad orari cadenzati (1 volta la giorno) e con il database chiuso, da qui il suggerimento di impostare un'operazione pianificata che lancia un db in cui risiede la routine di backup ed effettua il backup del database che vuoi, a patto che sia chiuso.

    Il database che contiene la routine di backup è un db che ha solo questo compito, ed è a se stante.

    La soluzione con la apiCopyFile copia un file indiscriminatamente, la funzione nativa FileCopy invece, se il file non è chiuso si genera un errore, da qui la gestione degli n tentativi...

    dalla giuda :

    Copia un file.

    Sintassi

    FileCopy source, destination

    La sintassi dell'istruzione FileCopy è composta dagliargomenti predefiniti di seguito descritti:

    Parte Descrizione
    source Obbligatoria. Espressione stringa che specifica il nome del file da copiare. Può includere la directory o cartella e unità.
    destination Obbligatoria. Espressione stringa che specifica il nome del file di destinazione. Può includere la directory o cartella e unità.

    Osservazioni

    Se si cerca di utilizzare l'istruzione FileCopy per un file aperto, verrà generato un errore.

    Il Db chiuso consente di avere la certezza che non ci siano attività pendenti, o pagine del db engine aperte e dati non completamente memorizzati.

    La soluzione alternativa potrebbe essere quella di un file in VBS che, sostanzialmente fa la stessa cosa...ma visto che siamo in access....

    Ti lascio ragionare con calma.

    Un saluto.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-08-27T21:17:54+00:00

    Ciao Sandro,

    adesso ho capito il fraintendimento.

    A me non interessa fare il backup di un altro database rispetto a quello che sto usando.

    Quello che a me serve, è poter fare il backup del database in uso, magari in fase di aggiornamento di dati sensibili.

    Per il momento mi accontenterei di fare backup progressivi ad ogni uscita dal database.

    Grazie comunque dell'interessamento, metterò da parte anche il tuo suggerimento: potesse mai servire!

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento