Newsgroup: it.comp.appl.access
Titolo: Attendere finchè non ha finito di copiare un file

vorrei creare un ripristino dati nel caso l'utente faccia operazioni particolari sui dati del database
 
pensavo id eseguire una copia di backup del file dati.accdb prima di eseguire per esempio una operazione di cancellazione record, consentendo all'operatore di ripristinare i dati cancellati.
 
il mio dubbio è che mentre eseguo la copia del file il codice prosegue e cancella i record creando una situazione anomala.
 
è possibile dire al codice vba quanto segue:
Copia il file A da B a C e attendi ad eseguire il resto del codice finchè la copia non è terminata?
 
Grazie.


-----------------------------------------------
Dim process_id As Long
Dim process_handle As Long
 
process_id = Shell(program_name)
process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
 
If process_handle <> 0 Then
     WaitForSingleObject process_handle, INFINITE
     CloseHandle process_handle
     End If
 
Ovviamente ci vogliono anche le:
 
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal 
dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId 
As Long) As Long
 
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject 
As Long) As Long
 
Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal 
hHandle As Long, ByVal dwMilliseconds As Long) As Long
-----------------------------------------------
 
Dovrebbe esserci sostanzialmente tutto
Si tratta di leggere il process_id del program_name lanciato, e poi si 
mette in attesa della sua chiusura
Magari c'e' una via anche piu' semplice

Il 01/06/2023 03:28, mario rossi ha scritto:

cosa intendi al lato pratico con "consentendo all'operatore di 
ripristinare i dati cancellati."
 
a) viene ripristinato l'intero file BE  (pessima soluzione a mio avviso)
b) manualmente vai a vederti nel "backup" i record cancellati e in 
qualche modo vai ad re-importarli nel BE attuale
 
BFS


Grazie ad entrambi.
si l'idea era quella di ripristinare il fiel accdb completo allo stato precedente l'operazione indesiderata ma è un accdb che contiene solo le tabelle in questione non ripristina altre tabelle.
c'è la possibilità di creare una copia della tabella ed eventualmente ripristinare la tabella intera all'interno del database anziché il file accdb in windows?
 
Grazie.
 
 


non è a mio avviso comunque una soluzione saggia la tua..
immagina:
 
Utente A da PC A esegue cancellazione dalla Tabella A...il programma in 
automatico fa prima una copia.
 
Utente B da PC B aggiunge una manciata di record alla tabella A (o in 
altra tabella)
 
Utente A si accorge dell'eliminazione fatta per errore e avvia la 
procedura di recupero del file backuppato
 
Utente B ha perso tutti i suoi dati causa sovrascrittura del BE
 
stessa cosa nel caso di ripristino della singola tabella.
 
 
dovresti secondo me via interfaccia grafica assicurarti sempre che uno 
non cancelli dati per sbaglio, quindi richiedendo le apposite conferme 
prime di eliminare qualcosa.
Se qualcuno elimina per sbaglio qualcosa recuperi il BE dal backup e gli 
fai una stampata di cosa aveva cancellato
 
Oppure mettere il classico flag "eliminato" su ogni record, non 
cancellare mai nulla e variare solo il valore di quel flag quando un 
utente "cancella" qualcosa
Ma qui ovviamente vanno riviste query e automatismi
 
BFS
 


no a questo avevo pensato l'area è modificabile da un utente per volta gli altri entrano in sola lettura quindi non c'è rischio di modifiche multiple da più postazioni e chi è all'interno in modalità modifica uscendo perde la possibilità di annullare le operazioni svolte.