Newsgroup: it.comp.appl.access
Titolo: Compattazione database esterno da codice

Ciao a tutti.
Sto cercando di automatizzare la procedura di compattazione del dababase
(esterno all'interfaccia) che contiene i dati, ovvero, solo ed
esclusivamente le tabelle.
Qualcuno ha già risolto il problema?
Da dove si cominicia?
Links utili?
Grazie


www.stocomune.com
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa1 - I° Conferenza Italiana per Sviluppatori Access Arezzo 4+5
Giugno 2005 Info:  
www.donkarl.com/it

Ho trovato questo codice scritto molto bene e molto chiaro.
Purtroppo si blocca e mi viene comunicato l'errore
"Impossibile procedere con questo tipo di oggetto".
Ho controllato riga per riga con il debug e l'errore si verifica qui:
DBEngine.RepairDatabase backend
Considenrando che "backend" contiene regolarmente la stringa del database
dei dati, da cosa potrebbe dipendere?
   Dim backend As String
   Dim strSQL As String
   Dim rs As Recordset
   Dim risp As Integer
   Dim copia As String
   Dim msg As String
   strSQL = "SELECT Trim([Database]) AS DB " & _
            "FROM MSysObjects " & _
            "GROUP BY Trim([Database]), MSysObjects.Type " & _
            "HAVING (((MSysObjects.Type)=6));"
   Set rs = CurrentDb.OpenRecordset(strSQL)
   If rs.EOF And rs.BOF Then GoTo esci
   risp = MsgBox("Procedere con salvataggio e compattazione?", _
      vbQuestion + vbYesNo)
   If risp <> vbYes Then Exit Sub
   DoCmd.Hourglass True
   DoCmd.SetWarnings False
   rs.MoveFirst
   msg = ""
   Do
       backend = rs![DB]
       msg = backend & vbCrLf & msg
       DBEngine.RepairDatabase backend
       DBEngine.CompactDatabase backend, backend & ".new"
       copia = Dir(backend & ".bak")
       If copia <> "" Then Kill backend & ".bak"
       Name backend As backend & ".bak"
       Name backend & ".new" As backend
       rs.MoveNext
   Loop Until rs.EOF
   MsgBox "Compattazione terminata per i seguenti DB:" & _
      vbCrLf & msg, vbExclamation
esci:
   rs.Close
   DoCmd.SetWarnings True
   DoCmd.Hourglass False
   Exit Sub
gestErr:
   MsgBox Err.Number & " - " & Err.Description
   GoTo esci


Questo codice è stato scritto per A97.
Devi inserire i riferimenti DAO
    Dim rs As DAO.Recordset


 ha scritto nel messaggio
news:%%gre.3533$h5.1...@news3.tin.it...

Oltre a quanto già scritto da Massimiliano, prova a guardare anche:
http://www.donkarl.com/it/
FAQ 6.6
ed inoltre:
http://www.geviservices.it/Accessgroup/iscritti/Traduzioni.asp
Cap. 8  - Manutenzione del database
--
rgrds
SC

 wrote in message
news:rGgre.3459$
h5.1...@news3.tin.it

La cosa si deve effettuare tramite DAO oppure JRO, e può
essere effettuata dal FE.
Il problema nasce nel caso di Multiutenza, poichè l'azione
non può essere effettuata se esiste un recordset aperto.
A questo punto è bene chiarire che in caso di Multiutenza le
soluzioni non sono molte:
1)Aspetti orari assurdi di notte e lanci un TaskScheduled con
 la compattazione via VBS.
2)Forzi un LogOut degli utenti, quindi dal Tuo DB di Manutenzione
  fai il Compact.
Per il 2° punto la cosa è da impostare, io la gestisco in questo
modo:
All'apertura apro in modalità Hidden una Form che all'apertura
verifica il FLAG di Login=True e mi registra il LOGIN stesso
come UserName in una Tabella, ciclicamente
ogni 10secondi verifica sul Server sempre il detto Flag se Flag=FALSE
inizio il countDown per il LogOut avvisando l'utente
e quindi Salvando alla fine.
Questa tabella è lato Server.
Fatto questo dopo il mio tempo di TimeOut circa 5 minuti abilito
l'applicativo di Manutenzione alla Compattazione dopo
aver verificato che il Numero di Utenti Loggati=0
altrimenti(solo in caso di CRASH, via WMI Killo Access nella
macchina Remota), quando ho terminato modifico il FLAG 
in modo da permettere il Login.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG