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

compatta e ripristina database

596 views
Skip to first unread message

mimì

unread,
Nov 15, 2012, 2:52:27 AM11/15/12
to
buongiorno a tutti, siccome uso un DBA 2007, dove non è possibile inserire una barra del menù personalizzata sulla maschera, come facevo con la versione 2000, qualcuno potrebbe dirmi il codice VBA che potrei usare per avviare un azione "compatta e ripristina database" da un pulsante sulla maschera?
Grazie mille

M7a1x

unread,
Nov 15, 2012, 10:46:50 AM11/15/12
to
On 15 Nov, 08:52, mimì <dgamb...@libero.it> wrote:
> buongiorno  a tutti, siccome uso un DBA 2007, dove non è possibile inserire una barra del menù personalizzata sulla maschera, come facevo con la versione 2000, qualcuno potrebbe dirmi il codice VBA che potrei usare per avviare un azione "compatta e ripristina database" da un pulsante sulla maschera?
> Grazie mille

Ciao mimì...
prova con: DoCmd.RunCommand acCmdCompactDatabase
con A03 funziona benissimo
Saluti
M7a1x

Fair87

unread,
Nov 15, 2012, 6:09:10 PM11/15/12
to
Da VBA

Application.CompactRepair(SourceFile, DestinationFile, LogFile)

mimì

unread,
Nov 16, 2012, 6:12:05 AM11/16/12
to
Il giorno giovedì 15 novembre 2012 08:52:27 UTC+1, mimì ha scritto:
> buongiorno a tutti, siccome uso un DBA 2007, dove non è possibile inserire una barra del menù personalizzata sulla maschera, come facevo con la versione 2000, qualcuno potrebbe dirmi il codice VBA che potrei usare per avviare un azione "compatta e ripristina database" da un pulsante sulla maschera?
>
> Grazie mille

ho provato con:
DoCmd.RunCommand acCmdCompactDatabase
ma non funziona

invece non ho capito come applicare:
Application.CompactRepair(SourceFile, DestinationFile, LogFile)
scusate non sono molto esperto.
grazie

Fair87

unread,
Nov 16, 2012, 6:38:13 AM11/16/12
to
Non funziona è un po' vago.....
il codice VBA invece lo applichi sull'evento Click di un pulsante che crei tu

Private Sub PulsCompatta_Click()

Application.CompactRepair(SourceFile [Dove si trova il file da compattare], DestinationFile [Dove vuoi mettere il file compattato], LogFile [opzionale, se vuoi un log dell'operazione])

End Sub

Poi premi e ottieni quello che chiedevi

E' impossibile che non funzioni il runcommand. Mi sa che anche li mancano i riferimenti. Tu gli hai detto Compatta e ripristina (=acCmdCompactDatabase) ma ti sei dimenticato di dirgli COSA e DOVE.....metti il cursore su acCmdCompactDatabase e premi F1...ti si apre un mondo!!!

mimì

unread,
Nov 16, 2012, 7:37:06 AM11/16/12
to
Grazie Fair87,
ma facendo F1 su acCmdCompactDatabase, mi dice altre cmd, ma nessuna soluzione al problema;
ho provato a scrivere il tuo codice in questo modo

Private Sub Comando381_Click()

Application.CompactRepair (SourceFile([C:\Users\d.g\Desktop], DestinationFile([C:\Users\d.g\Desktop])))

End Sub

ma mi dà un errore che dice così: Sub o Function non definita

scusa ma non ci arrivo da solo

M7a1x

unread,
Nov 16, 2012, 8:58:24 AM11/16/12
to

Fair87

unread,
Nov 16, 2012, 9:59:49 AM11/16/12
to
Copiato pari pari dall'help

Application.CompactRepair Method




Compacts and repairs the specified database or Microsoft Access project (.adp) file. Returns a Boolean; True if the process was successful.
Syntax

expression.CompactRepair(SourceFile, DestinationFile, LogFile)

expression A variable that represents an Application object.

Parameters




Name

Required/Optional

Data Type

Description



SourceFile

Required

String

The full path and filename of the database or project file to compact and repair.



DestinationFile

Required

String

The full path and filename for where the recovered file will be saved.



LogFile

Optional

Boolean

True if a log file is created in the destination directory to record any corruption detected in the source file. A log file is only created if corruption is detected in the source file. If LogFile is False or omitted, no log file is created, even if corruption is detected in the source file.


Return Value
Boolean

Remarks


The source file must not be the current database or be open by any other user, since calling this method will open the file exclusively.


Example


The following example compacts and repairs a database, creates a log if there's any corruption in the source file, and returns a Boolean value based on whether the recovery was successful. For the example to work, you must pass it the paths and file names of the source and destination files.




Visual Basic for Applications



Function RepairDatabase(strSource As String, _
strDestination As String) As Boolean
' Input values: the paths and file names of
' the source and destination files.

' Trap for errors.
On Error GoTo error_handler

' Compact and repair the database. Use the return value of
' the CompactRepair method to determine if the file was
' successfully compacted.
RepairDatabase = _
Application.CompactRepair( _
LogFile:=True, _
SourceFile:=strSource, _
DestinationFile:=strDestination)

' Reset the error trap and exit the function.
On Error GoTo 0
Exit Function

' Return False if an error occurs.
error_handler:
RepairDatabase = False

End Function

mimì

unread,
Nov 16, 2012, 10:04:22 AM11/16/12
to
Il giorno giovedì 15 novembre 2012 08:52:27 UTC+1, mimì ha scritto:
> buongiorno a tutti, siccome uso un DBA 2007, dove non è possibile inserire una barra del menù personalizzata sulla maschera, come facevo con la versione 2000, qualcuno potrebbe dirmi il codice VBA che potrei usare per avviare un azione "compatta e ripristina database" da un pulsante sulla maschera?
>
> Grazie mille

ci proverò
lunedì vi farò sapere
grazie e buon weekend

mimì

unread,
Nov 20, 2012, 6:14:03 AM11/20/12
to
Ciao a tutti ho provato ad inserire il codice di Fair87, ma non và. Non c'è qualcosa di più semplice, ricordandando che parliamo di un dba di access da 2003 a 2007. grazie

mimì

unread,
Nov 20, 2012, 6:14:37 AM11/20/12
to

Fair87

unread,
Nov 20, 2012, 11:26:51 AM11/20/12
to
Il giorno martedì 20 novembre 2012 12:14:04 UTC+1, mimì ha scritto:
> Ciao a tutti ho provato ad inserire il codice di Fair87, ma non và. Non c'è qualcosa di più semplice, ricordandando che parliamo di un dba di access da 2003 a 2007. grazie

Non va è vago....copia e incolla il codice che hai scritto tu

mimì

unread,
Nov 21, 2012, 7:53:36 AM11/21/12
to
> Non va è vago....copia e incolla il codice che hai scritto tu

ho scritto questo:


Private Sub Comando381_Click()

Application.CompactRepair (SourceFile([C:\Users\d.g\Desktop], DestinationFile([C:\Users\d.g\Desktop])))

End Sub

mi evidenzia "DestinationFile" e mi da errore:

Fair87

unread,
Nov 21, 2012, 11:39:41 AM11/21/12
to
Eccicredo!!!Sourcefile non lo devi scrivere mica! Vuol dire: 'indicami il file sorgente' e così via!

Application.CompactRepair ("C:\Users\d.g\Desktop\TuoFile....", "C:\Users\d.g\Desktop\AltroNomefile....")

o similari! Ma ti conviene smettere di fare copia/incolla e cercare di capire cosa fai se no non ne esci...

mimì

unread,
Nov 22, 2012, 5:42:01 AM11/22/12
to
Scusate ma c'è un modo per dire via codice:
prendi questo database e...., anzichè scrivere percorso e nome del database nel codice?

Grazie

Fair87

unread,
Nov 22, 2012, 10:13:11 AM11/22/12
to
Perdona l'insistenza ma.....'prendi questo database e....' è esattamente 'Prendi questo database, che si chiama Pippo.mdb, che si trova qua, fammi la compattazione e, chiamandolo Pluto.mdb, me lo metti la' dov'è la differenza? E' esattamente quello che chiedi. Lo devi solo dire al povero Jet che ancora (ma per poco) non ti legge nel pensiero

Application.CompactRepair( Application.CurrentDb.Path & "\" & application.Currentdb.Name & ".mdb", Application.CurrentDb.Path & "\" & application.Currentdb.Name & "_Compattato.mdb")


Spiegazione (se no me la copi e poi non va)
Application.CurrentDb.Path = percorso del DbCorrente
application.Currentdb.Name = Nome del db corrente

L'ho scritta a braccio, quindi occhio (ma sto F1 proprio ti stà antipatico?)

mimì

unread,
Nov 23, 2012, 3:31:48 AM11/23/12
to
Grazie.
0 new messages