Newsgroup: it.comp.appl.access
Titolo: codice VBA per fare copia del Database aperto

Salve a tutti.
Per cortesia, vorrei risolvere questo problema:
ho un database aperto e prima di fare determinate azioni, vorrei fare copie 
automatiche (con un percorso prestabilito da codice VBA) del database 
aperto.
Potreste darmi indicazioni circa il codice VBA da scrivere ?
Grazie
Luciano 


Se non hai diviso in FE-BE ed hai solo un file MDB è impossibile che
tu riesca a scrivere codice che venga eseguito
dal tuo File per far copiare se stesso mentre in esecuzione...!
Per questo la divisione dell'applicativo in 2 come peraltro ormai
tutti dovrebbero fare... è la soluzione migliore.
A quel punto usando FileCopy :
Sub FileCopy(Source As String, Destination As String)
    Membro di VBA.FileSystem
Ciao
@Alex


-- 
ac (x=y-1)

 ac (x=y-1)
AleC non credo...!
Io ho provato quello che ho detto...!!!!
Ho aperto un MDB... scritto una funzione con FileCopy che Copiasse
Mestesso su un nuovo...
Risultato.... ACCESSO NEGATO
che era la ovvia risposta che il sistema può dare vedendo il file in
uso.
Con FSO la cosa credo sia fattibile.
Se però ho sbagliato qualche considerazione fammi capire magari che
prove hai fatto tu con quella Funzione.
@Alex

 ac (x=y-1)
AleC non credo...!
Io ho provato quello che ho detto...!!!!
Ho aperto un MDB... scritto una funzione con FileCopy che Copiasse
Mestesso su un nuovo...
Risultato.... ACCESSO NEGATO
che era la ovvia risposta che il sistema può dare vedendo il file in
uso.
Con FSO la cosa credo sia fattibile.
Se però ho sbagliato qualche considerazione fammi capire magari che
prove hai fatto tu con quella Funzione.
-----------------------------------------
Dai per scontato che la funzione per la copia sia dentro il file da copiare
Non mi pare sia stato specificato questo nella richiesta originale
Magari la domanda era rivolta alla possibilita' di copiare un file mdb 
attualmente aperto da altre procedure, usando codice vba residente su altro 
file
E allora probabilmente e' possibile la cosa anche col filecopy
Ciao
RobertoA

 Se per� ho sbagliato qualche considerazione fammi capire magari che


 @Alex
On Error Resume Next
     Set fso = CreateObject("Scripting.FileSystemObject")
Do Until rs.EOF
     If IndCopia Then
         iSel = True
         aPath = Split(Percorso, "\")
         strCPath = tCopiaDa & "\" & aPath(UBound(aPath))
         strNPath = Percorso
'-        Kill strNPath
         Err.Clear
         Set fx = fso.GetFile(strCPath)
         fx.Copy strNPath
'-            FileCopy strCPath, strNPath
         If Err.Number <> 0 Then
             sMsg = sMsg & " - " & strNPath & " - " & Err.Description & 
vbCrLf
             sMsg = sMsg & " - " & "Verificare percorso origine dati" & 
vbCrLf
         Else
             rs.Edit
                 DataCopia = Date
                 IndCopia = False
             rs.Update
         End If
     End If
     rs.MoveNext
Loop
Questa la avevo fatta per "distribuire" il BE (client) sui vari pc della 
rete. Si basa su una tabella che contiene i percorsi origine e finale
-- 
ac (x=y-1)

 Ciao
Bono ....... stai bono e abbi pazienza.
Per favore rispondi dopo il quote.
Nella mia risposta ad @Alex c'e' del codice che potrebbe esserti utile.
-- 
ac (x=y-1)

Il 12/02/2011 11.59, Alessandro Cara ha scritto:
P.S.
Avevi ragione sul filecopy, non funzionava, la routine ovviamente puo' 
servire a copiare qualsiasi tipo di file.
-- 
ac (x=y-1)

> Se però ho sbagliato qualche considerazione fammi capire magari che

scusa ma la tua routine mi da un errore di compilazione:
Set fso =
variabile non definita.
che devo fare ?
Ciao
Grazie 

 RobertoA
Roberto... leggi bene la richiesta, confermata poi anche dalla
risposta.
Come dissi solo con FSO è fattibile o, ricorrendo ad un processo
esterno che chiude e riapre.
@Alex


wrote:

Sapevo di avere ragione... volevo che capissi tu il tuo errore senza
essere scortese...!
Ciao
@Alex


Quel codice non puo' essere usato "tal quale". Ho tagliato una parte che 
non interessava.
Questa e' la routine completa.
N.B. Come ho gia' scritto io uso una tabella di riferimento (che e' 
recordsource di un form tabellare)  per prelevare il path target e che 
consente di selezionare i files da copiare.
Private Sub bEsegui_Click()
Dim fso, fx
Dim rs As Variant, aPath As Variant, iSel As Boolean
Dim strNPath As String, strCPath As String, sMsg As String
DoCmd.Hourglass True
Set rs = Recordset
rs.MoveFirst

DoCmd.Hourglass False
If iSel Then
     If "" & sMsg = "" Then
         MsgBox "Copia archivi terminata", vbInformation, "Copia archivi"
     Else
         sMsg = "Copie non eseguite :" & vbCrLf & sMsg
         MsgBox sMsg, vbCritical, "Copia archivi"
     End If
     ' riapre i recordset pubblici
Else
     MsgBox "Nessun archivio selezionato per la copia", vbExclamation
End If
End Sub
-- 
ac (x=y-1)


mah.....veramente non mi ricordavo quale oggetto avessi usato ma 
soprattutto non ricordavo che filecopy non era un metodo di fso.
Quello che ricordavo e' che si puo' fare.
-- 
ac (x=y-1)

 ac (x=y-1)
@Alex

 colpi... oppure � la primavera... oppure sei innamorato....?
La avevo letta la risposta. La davi come ipotesi da confermare ed il 
problema come parto malato di mente malata (anche in questo sono in 
prima fila).
Ne hai prese 2 su tre l'ultima e' ormai memoria remota.
-- 
ac (x=y-1)

 ac (x=y-1)
@Alex

 ac (x=y-1)
AleC non credo...!
Io ho provato quello che ho detto...!!!!
Ho aperto un MDB... scritto una funzione con FileCopy che Copiasse
Mestesso su un nuovo...
Risultato.... ACCESSO NEGATO
__
Ecco il problema... evidentemente il tuo pc gią non regge uno di te.. 
addirittura 2 te stesso...
L'avevano detto che innalzavano la protezione del pc, non credevo 
intendessero finoa questo punto...
;-)
MA

 MA
Non mi reggerei nemmeno io come Clone... penso sia come dici...!
@Alex