Newsgroup: it.comp.lang.visual-basic
Titolo: RepairDatabase e CompactDatabase

Ho un DB in access 97, ogni tanto va in errore e devo "ripararlo" e
"compattarlo"
Ho consultato l'help, ma non capisco dove sia il problema
Qualcuno mi sa dare qualche consiglio su come evitare che il db si danneggi
(apro e chiudo le transizioni, il Pc e' dotato di gruppo di continuita')
o almeno mi sa dire cosa fanno esattamente queste funzioni?
(posso rifarle con codice vb?)

>(posso rifarle con codice vb?)
 Ecco i miei due cents.
Da quel che ne so io, con ADO non e' prevista la possibilita' di compattare
database (fonte M$ di aprile, non so se nel frattempo...)
Devi chiudere le tutte le connessioni e eventuali report di report designer
e fare la compattazione in DAO.
Se qualcuno conosce un altro sistema me lo dica per favore, anche perche'
tutte le connessioni automatiche in questo modo me le devo rigenerare a mano
e non e' per niente comodo....
Andrea
------------------ Cut And Paste -------------------------
Sub CompactDatabaseX()
    Dim DbInp As String
On Error GoTo ErrFind
    DbInp = GDbPath & GDBName
    CloseConnections
    'esegue la compressione tramite RDO
    CompactDB DbInp
    OpenConnections
    Exit Sub
ErrFind:
    MsgBox Error$
    Resume Next
End Sub
Sub CompactDB(DbName As String)
'Nella stringa DBName spcificare il nome del DB da compattare
'completo del path
    On Error Resume Next
    Dim TmpFile As String
    Dim FileDataBase As String
    Dim Messaggio As String
    Dim DimIniziale As Long
    Dim DimFinale As Long
    Dim Differenza As Long
    Dim Percentuale As Long
    Dim tmp As String * 20
    On Error GoTo ErrFind
    FileDataBase = DbName
    Screen.MousePointer = 11
    TmpFile = App.Path & "\data.tmp"
    DimIniziale = FileLen(FileDataBase)
    MsgBox "Compressione in corso..."
'    DBEngine.CompactDatabase gDbPath & gDbName, gDbPath & "data.tmp"
    DBEngine.CompactDatabase FileDataBase, TmpFile
    If Dir$(TmpFile) <> "" Then
        Kill FileDataBase
        Name TmpFile As FileDataBase
    Else
        Messaggio = "Errore durante la compressione del file "
        Messaggio = Messaggio + vbCrLf + "Il Database non e' stato
compresso"
        Screen.MousePointer = 0
        MsgBox Error$ & vbCrLf & Messaggio, 48, "Attenzione"
        Exit Sub
    End If
    DimFinale = FileLen(FileDataBase)
    Differenza = DimIniziale - DimFinale
    Percentuale = 100 - (100 * (DimFinale / DimIniziale))
    Messaggio = "Compressione completata!" & vbCrLf & vbCrLf
    RSet tmp = Format$(DimIniziale, "###,###,###,##0")
    Messaggio = Messaggio & "-------------------------" & vbCrLf
    Messaggio = Messaggio + "Dimensioni originali (bytes)" & tmp & vbCrLf
    RSet tmp = Format$(DimFinale, "###,###,###,##0")
    Messaggio = Messaggio + "Dimensioni compresse (bytes)" & tmp & vbCrLf
    RSet tmp = Format$(Differenza, "###,###,###,##0")
    Messaggio = Messaggio & "-------------------------" & vbCrLf
    Messaggio = Messaggio + "Spazio liberato (bytes)" & tmp & vbCrLf &
vbCrLf
    RSet tmp = Format$(Percentuale, "###,###,###,##0")
    Messaggio = Messaggio + "Percentuale di compressione" & tmp
    Screen.MousePointer = 0
    MsgBox Messaggio, 64, "Statistiche sulla compressione"
    Exit Sub
ErrFind:
    Screen.MousePointer = 0
    MsgBox Error$
End Sub
------------------ Cut And Paste -------------------------


Oggetto: R: ADO CompactDatabase e RepairDatabase ?!?!
Data: domenica 8 agosto 1999 15.16
salve,
se usi jet4 puoi usare l'oggetto JRO (jet4 ha solo il metodo compact, che
include anche il repair)
, mentre se usi jet 3.51 o ti crei una dll di stub che usa dao per fare la
cosa oppure qualche cosa tipo
Private Declare Function SQLConfigDataSource Lib "odbccp32.dll" _
    (ByVal hWnd As Long, ByVal fRequest As Integer, _
     ByVal cDriver As String, ByVal cAttributes As String) As Boolean
Private Const ODBC_ADD_DSN = 1
    Dim bResult As Boolean
    Dim cDriver As String
    Dim cAttribute As String
    cDriver = "Microsoft Access Driver (*.mdb)"
    cAttribute = "COMPACT_DB=c:\Temp\test.mdb c:\Temp\test.mdb General"
    bResult = SQLConfigDataSource(Me.hWnd, ODBC_ADD_DSN, cDriver,
cAttribute)
questa non e' roba mia, e non l'ho neanche provata...
saluti
Andrea Montanari
andrea.m...@iol.it
' Fine vecchia risposta
Prova a vedere se funziona.............