C'è qualcuno che mi può aiutare a realizzarlo? Ricapitolo:
Idea: nella maschera di avvio di "fatturazione.mdb" inserisco un pulsante
con scritto "BACKUP".
Funzionamento: Al click, esso fa semplicemente una copia carbone del file
access
i) incrementale sul disco fisso, al path
c:\backup\[aaaa-mm-gg]fatturazione.mdb
ii) fissa, sulla chiavetta usb al path
F:\backupfatturazione\fatturazione.mdb (sovrascrivi automaticamente sì)
Io uso un tool free esterno, fa tutto quello che dici tu e per di più zippa
il file.
Si chiama cobian backup... se può esserti utile ..
Non sò di che programmatori parli quando dici che questo viene spesso
dimenticato,
io mi dissocio da questa affermazione.
Il beckup dei dati è una cosa che si può vedere in molti modi:
1)Volontaria, ed è quello che dici tu per la quale non ci sono
grosse difficoltà , ti copi il BE cambiandogli nome con quanto hai
detto [aaaa-mm-gg]fatturazione.mdb, io lascerei perdere la
possibilità di fare scegliere all'utente...., la cartella la crei tu
con il Setup e sarà una cartella dedicata ai BackUp.
La volontarietà è uno scarico di responsabilità, ma in quanto a serietà
professionale di chi fornisce un applicativo è da valurare bene in base
alla tipologia dei dati.
P.S. per farlo devi avere una Form non associata ed avere tutte le
risorse
connesse al BE libere, nel senso nessun RECORDSET aperto o bloccato.
In pratica se gestisci correttamente il tutto basta una Form NON
ASSOCIATA
che faccia un bel COPIA e RINOMINA
2)Schedulare un Backup alla mezzanotte se il PC è sempre acceso
oppure al riavviamento.
Cosa altrettanto semplice, basta creare un file SCRIPT e farlo eseguire
da un BATCH
che può essere inserito nelle schedulazioni di Win2K, oppure nei file di
avvio automatico
di qalunque SO, oppure all'apertura dell'applicativo, oppure...... boh.
Ciao
--
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------
Anch'io uso la soluzione proposta da Alex:
copia del Be con data_nomeDB
Io uso il comando VB "FileCopy SourceFile, DestinationFile"
in un modulo , prima di far aprire una qualsiasi maschera
in modo da non avere Recordset aperti.
A proposito di quest'ultima aspetto, il mio problema sta nel
fatto che allo stesso BE accedono due FE (da 2 PC diversi) e
quindi il FE che "chiama" per secondo il BE mi segnala errore
nella procedura di copia del BE (perchè già aperto dal primo
FE). Qualcuno sa dirmi come bypassare il problema?
Avevo anche pensato di utilizzare il Cobian (come suggerito)
ma preferirei una soluzione che non fosse legata ad un programma
esterno (in modo da poter spostare il FE su un altro PC che non
ha Cobian, se necessario).
Silvia
--
Inviato da Virgilio http://newsgroup.virgilio.it
Filtra gli antipatici, segnala le risposte, segue i thread, e tutto da web
Si potrebbe aprire un dibattito su questa cosa....!
In modo semplice e banale
if Dir(NomeFile)=0 then FaiBackUp
Se ilò file esiste già non lo fà.
A questo punto io rendo possibile la Forzatura del BackUp
in manuale proponendo il Nome+Progressivo.
Ciao
--
@Alex (Alessandro Baraldi)
nell'istruzione "if Dir(NomeFile)=0 then FaiBackUp"
FaiBackUp come lo faresti?
Io con il comando Filecopy pensavo di essere a posto
ma poi ho scoperto che se il Be è impegnato non me lo
fa copiare con un altro nome (nome+progressivo) e in
un altro percorso.
esiste un comando alternativo per queste situazioni?
No ti concede di farlo perchè lo stai facendo con un Recordset
aperto sul BE.
Chiudi tutte le Form associate e/o i Recordset aperti sul BE,
esegui la procedura, quindi riapri la Form che era aperta prima.
Deve andare perchè lo uso da anni ed Access non è cambiato..!
Scherzi a parte vedi se con questi accorgimenti risolvi.
Ciao
--
@Alex (Alessandro Baraldi)
Dal FE2 posso far chiudere i recordset
aperti dal FE1 sul BE comune
prima di lanciare il FileCopy??
e come??
In multiutenza la cosa va struttrata a monte.
Io per la gestione dei BackUp ho un DB di Manutenzione
che uso io con il quale Forzo il Logoff dei Client.
Ogni Client quando è Loggato mi scrive in una Tabella
USer nel Campo Connected (True)
Tale Tabella ha un campo LogOff.
Ciclicamente i Client esplorano relativamente allo User
il valore di LogOff del singolo e se lo trovano =True
iniziano una sequenza di chiusura temporizzata.
Lato Manutenzione ho che il tempo = 5minuti
mente i Client lascio 3Minuti per chiudere e salvare.
Nel caso passino i 3 minuti chiudo e salvo da Client.
Nel DB di manutenzione quando tutti i Client sono
Sconnessi esegue automaticamente il BackUp
dei Database lato Server.
La mia gestione è abbastanza complessa, lavora in una
grossa rete, pertanto potrebbe avvenire che un Client si pianti.
lasciando bloccato il file ldb, quindi ciclo gli utenti di rete
del file host abilitati all'applicativo e vedo se nelle macchine è
aperto l'applicativo, in realtà verifico l'Istanza del programma in quanto
un'utente potrebbe avere Access aperto per i fatti suoi, e gli KILLO
l'eventuale sessione che mi blocca, quindi cancello il file ldb.
Come vedi il tutto è abbastanza impegnativo, soprattutto ha molto a che
vedere con l'amministrazione di rete, scorazzare nelle macchine di rete
è possibile solo passando a WMI l'Impersonate di ADMIN di rete.
Spero di non averti scosso troppo, tu di tutte le cavolate che ho detto
prendi solo la parte che ritieni utile.
Ciao
--
@Alex (Alessandro Baraldi)
> Spero di non averti scosso troppo, tu di tutte le cavolate che ho detto
> prendi solo la parte che ritieni utile.
>
> Ciao
> --
> @Alex (Alessandro Baraldi)
PANICO !!!!!
no per fortuna non č la mia situazione, io ho solo 2 Fe che chiamano il BE
e se qualcosa non va nella rete, in access o nell'applicativo non fanno
altro
che chiamarmi e io di persona killo tutto !!!
Perň interessante questa gestione in ambiente multiutente (anzi
"moltiutenti")
Mi si č aperta una nuova prospettiva.
Grazie vedrň di far lavorare le meningi finchč non ne viene qualcosa di
buono
Silvia
Public Function CopyFile( SourceName As String, ByVal DestName As String) As
Integer
' Copies a single file SourceName to DestName
'
' Calling convention:
' X = CopyFile("C:\This.Exe", "C:\That.Exe")
' X = CopyFile("C:\This.Exe", "C:\Temp\This.Exe")
'
Const BufSize = 8192
Dim Buffer As String * BufSize, TempBuf As String
Dim SourceF As Integer, DestF As Integer, i As Long
On Error GoTo CFError
SourceF = FreeFile
Open SourceName For Binary As #SourceF
DestF = FreeFile
Open DestName For Binary As #DestF
For i = 1 To LOF(SourceF) \ BufSize
Get #SourceF, , Buffer
Put #DestF, , Buffer
Next i
i = LOF(SourceF) Mod BufSize
If i > 0 Then
Get #SourceF, , Buffer
TempBuf = Left$(Buffer, i)
Put #DestF, , TempBuf
End If
Close #SourceF
Close #DestF
CopyFile = True
CFExit:
Exit Function
CFError:
Close
MsgBox "Error " & Err.Number & " copying files" & Chr$(13) & Chr$(10) &
Error
CopyFile = False
Resume CFExit
End Function
E' una Funzione che rallenta moltissimo rispetto alla Nativa di VBA.
Poi come filosofia mia se VBA dispone di una funzione uso quella
piuttosto che scriverne una che fa la stessa cosa.
Saluti