Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

backup

4 views
Skip to first unread message

davide scilabra

unread,
Jan 3, 2005, 5:23:25 AM1/3/05
to
Importante per tutti. Tra le cose più importanti che spesso i programmatori
dimenticano,
a detta di tutte le persone con cui ho avuto modo di lavorare, oltre che un
modo semplice
e rapido per fare le operazioni (ma questo è dato dalla generalità degli
utenti cui è
destinato il programma) c'è la necessità di avere uno strumento sempre a
portata di mano
per effettuare UN BACKUP AUTOMATICO DEI PROPRI DATI.
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
Così se mi si fotte l'hard disk del cliente gli butto dalla finestra il suo
pc anteguerra,
gliene faccio comprare uno con winxp preinstallato, mi prendo la mia brava
chiavetta e
risolvo tutto in un secondo!
Con la mia idea in teoria bisognerebbe "dire" ad access di fare due salva
con nome, già preimpostati.
Ovviamente creando una piccola tabellina ed un'interfaccia utente si
potrebbe dare la
possibilità all'end user di scegliersi il path a piacimento, ma questa
sarebbe solo una
piccola aggiunta molto facile da realizzare.
Io penso sia una buona idea fornire all'utente finale la possibilità di fare
un backup
in questo modo (cioè con un tasto), e sinceramente poi se il tizio non lo
pigia mai
sono c....i suoi, noi a quel punto la coscienza ce l'abbiamo pulita (ed
eventualmente possiamo
creare ai clienti particolarmente rompi una macro che attivi il codice alla
chiusura,
ma a quel punto potremmo anche avere la necessità di saldargli a stagno la
chiavetta usb al pc!)

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ì)


ciroteo

unread,
Jan 3, 2005, 5:30:24 AM1/3/05
to

"davide scilabra" <dav...@libriscientifici.com> ha scritto nel messaggio
news:41d91d1d$0$10909$5fc...@news.tiscali.it...

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 ..


ALESSANDRO Baraldi

unread,
Jan 3, 2005, 1:31:34 PM1/3/05
to
"davide scilabra" <dav...@libriscientifici.com> ha scritto nel messaggio
news:41d91d1d$0$10909$5fc...@news.tiscali.it...


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/
---------------------------------------------------------------------------


Gaetano Di Zanni

unread,
Jan 3, 2005, 2:17:08 PM1/3/05
to

"ciroteo" <ciroteo_c...@libero.it> ha scritto nel messaggio
news:crb6qv$6ih$1...@hulme.interac.it...
Concordo sulla opportunità di usare cobian backup: è eccellente!


Sivia

unread,
Jan 4, 2005, 7:30:40 PM1/4/05
to
ALESSANDRO Baraldi ha scritto:


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

ALESSANDRO Baraldi

unread,
Jan 5, 2005, 2:28:41 PM1/5/05
to
[CUT]

> 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

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)

silvia

unread,
Jan 7, 2005, 7:21:35 AM1/7/05
to
ALESSANDRO Baraldi ha scritto:
> ------------------------------------------------------
> ---------------------
> http://www.sitocomune.com/
> http://www.mantuanet.it/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?

ALESSANDRO Baraldi

unread,
Jan 7, 2005, 1:53:07 PM1/7/05
to
> 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?
>
>
> Silvia

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)

SILVIA

unread,
Jan 7, 2005, 3:14:01 PM1/7/05
to

"ALESSANDRO Baraldi" <ik2...@libero.it> ha scritto nel messaggio
news:crmmbe$1om$1...@lacerta.tiscalinet.it...

> > 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?
> >
> >
> > Silvia
>
> 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)
> --------------------------------------------------------------------------
-
> http://www.sitocomune.com/
> http://www.mantuanet.it/alessandro.baraldi/
> --------------------------------------------------------------------------
-
>
>


Dal FE2 posso far chiudere i recordset
aperti dal FE1 sul BE comune
prima di lanciare il FileCopy??
e come??


ALESSANDRO Baraldi

unread,
Jan 7, 2005, 3:23:56 PM1/7/05
to
> 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)

SILVIA

unread,
Jan 7, 2005, 3:43:37 PM1/7/05
to
CUT

> 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


Giovanni Tirelli

unread,
Feb 28, 2005, 6:15:53 AM2/28/05
to
Io uso questa routine e non mi ha mai dato problemi:

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


ALESSANDRO Baraldi

unread,
Feb 28, 2005, 1:38:08 PM2/28/05
to
"Giovanni Tirelli" <pi...@pippo.it> ha scritto nel messaggio
news:J3DUd.55105$QG6.1...@twister2.libero.it...


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

0 new messages