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ù recente
  1. 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
  2. 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
  3. 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
  4. 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
  5. Anonimo
    2017-08-27T19:36:33+00:00

    ciao Vladimiro,

    [...]

    simpatico questo escamotage per Win64 o Win32   :-)

    [...]

    è indispensabile per dichiarare le Api discriminando la piattaforma a 32 o 64 bit di office.

    Con questa Api si apprezza poco, ma diventa fondamentale soprattutto nel caso in cui il tipo di variabile cambi, caso tipico l'handle.

    [...]

    Purtroppo, anche così non mi rilascia nessuna copia.

    Sicuramente ho sbagliato qualcosa e per farla breve ti allego il db chiamato Database Qui

    [...]

    no, non direi, manca l'impostazione della form in avvio del database :

    Strumenti, opzioni, database corrente ed imposti la form come mostra l'immagine.

    [...]

    Una cosa,

    come faccio ad inserire il seguente percorso:

    CurrentProject.Path & "\Database.mdb"

    con quest'altro:

    "C:\Users\Vladimiro\Desktop\Database.accdb"

    evitando l'errore:

    [...]

    una costante è un valore che non cambia mai, currentProject.Path varia a seconda del path in cui il db risiede quindi non puoi procedere in tal modo.

    visto che ci sei dichiara la costante di tipo string, il codice è più chiaro ed esplicito.

    L'attribuzione del tipo avviene in modo automatico nel caso manchi, ma è buona pratica impostarlo:

    Const strPathDB as string= "C:\Users\Vladimiro\Desktop\Database.accdb"

    Ovviamente il database deve essere un altro non quello che gestisce il backup.

    Oltre a questo imposta l'operazione pianificata.

    Per valutare la corretta creazione del backup è sufficiente che imposti un path di un db esistente e apri il database che effettua il backup.

    Nella stessa cartella trovi la copia.

    Il tutto si automatizza, come detto, con l'operazione pianificata.

    HTH.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento