Newsgroup: it.comp.lang.visual-basic
Titolo: Compact database

Salve,
ho un'applicazione che fa uso di database Access 97 ed usa ADO per accedere
al database stesso.
Avrei la necessita' di riparare e compattare il database.
Ho cercato un po' ed ho visto che con ADO, non e' possibile farlo, quindi
con la guida in linea ho trovato un modo per farlo con DAO.
Devo dire che DAO non lo conosco proprio, quindi non ho fatto altro che
copiare le istruzioni che ho trovato
Con:
DBEngine.RepairDatabase (App.Path & "\log.mdb")
sembra funzionare, o meglio, la riga di codice viene compilata e non
restituisce nessun errore se la eseguo.
Usando:
DBEngine.CompactDatabase(App.Path & "\log.mdb", App.Path & "\compact.mdb")
Come ho visto sulla guida, la riga non viene compilata e, se provo a
terminare l'istruzione, VB mi dice: Errore di compilazione, previsto =
Dov e' che sbaglio?
Nei riferimenti ho Dao 3.51 Objet Library (Dao350.DLL).

 ha scritto

*** ado (devi includere nei riferimenti jet and replication objects library)
la routine mi sembra fosse sul sito comune
Public Sub dbPack()
    If MsgBox("Pack / backup the database and exit the program ?", _
     vbYesNoCancel) <> vbYes Then Exit Sub
'    On Error GoTo ConnectionError
    mainDB.Close
    Set mainDB = Nothing
    Unload frmNet
    FileCopy App.Path & "\net2.mdb", App.Path & "\net2old.mdb"
    If Dir(App.Path & "\net2new.mdb") <> "" Then Kill App.Path &
"\net2new.mdb"
    Dim CNN As JRO.JetEngine
    Dim CnnSource As String
    Dim CnnTarget As String
    ' Attenzione : Il programma compatta i database di access 97.
    ' Per compattare database diversi da access 97 cambiare il "Engine
Type=4"
    '                              es. access 2000 cambiare il "Engine
Type=5"
    Screen.MousePointer = vbHourglass
    Set CNN = New JRO.JetEngine
    CnnSource = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=net2.mdb;User
ID=Admin;Password=;"
    CnnTarget = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=net2new.mdb;Jet OLEDB:Engine Type=5;"
    CNN.CompactDatabase CnnSource, CnnTarget
    Set CNN = Nothing
    Name App.Path & "\net2.mdb" As App.Path & "\net2tmp.mdb"
    FileCopy App.Path & "\net2new.mdb", App.Path & "\net2.mdb"
    Kill App.Path & "\net2tmp.mdb"
    On Error GoTo 0
    Screen.MousePointer = vbDefault
    MsgBox "OK -- Ending Program"
ExitError:
   Exit Sub
ConnectionError:
    Screen.MousePointer = vbDefault
    MsgBox " VB #" & Err.Number & " " & Err.Description & " " & Err.Source
    Resume ExitError
End Sub
*** dao
Private Sub mnuDBpack_Click()
    On Error Resume Next
    Dim time1: time1 = Timer
'    If LoadedForm Then
'        MsgBox ("Restart Ark and backup before loading tables!")
'        Exit Sub
'    End If
    If MsgBox("PACK ARK DATABASE?", vbYesNoCancel) <> vbYes Then Exit Sub
    If LoadedFormAdr Then Unload frmAdr: LoadedFormAdr = False
    If LoadedFormArk Then Unload frmArk: LoadedFormArk = False
    MainDB.Close
    Screen.MousePointer = 11
    DBEngine.CompactDatabase MyPath & "ARK.mdb", MyPath & "ARKnew.mdb"
    Beep
    Kill MyPath & "ARKold.mdb"
    Name MyPath & "ARK.mdb" As MyPath & "ARKold.mdb"
    Name MyPath & "ARKnew.mdb" As MyPath & "ARK.mdb"
    MsgBox ("Backup OK: " & vbCrLf & _
        MyPath & "ARK.mdb" & " -- " & _
            Format(FileLen(MyPath & "ARK.mdb"), "###,###,###,###") & vbCrLf
& _
        MyPath & "ARKold.mdb" & " -- " & _
            Format(FileLen(MyPath & "ARKold.mdb"), "###,###,###,###") &
vbCrLf & _
        Format(Timer - time1, "###,##0.##"))
    Screen.MousePointer = 0
    'MsgBox "NOW QUITTING"
    'End
    Set MainDB = OpenDatabase("ark.mdb")
    Set MainRs = MainDB.OpenRecordset("ark")
    Set MainRs3 = MainDB.OpenRecordset("addresses")
'ErrMan:
'     MsgBox Error & Error & " (" & Err & ")"
End Sub
come vedi dagli unload, dal commento su now quitting", ecc. , occhio -- 
specie in multiutenza -- che il db sia chiuso.
-- 
hth, ciao, j.
http://www.sundaysw.com

 Dov e' che sbaglio?
Parrebbe che sia una questione sintattica: usando le parentesi senza Call
viene intesa come funzione e quindi deve stare a destra di un =.
Togli le parentesi.

 Togli le parentesi.
...
Era lui, ciao.
Ciao... Maurizio

 la routine mi sembra fosse sul sito comune
....
Grazie per avermi fornito le indicazioni per ADO. Ero convinto che non si
potesse fare.
Per quel che riguarda DAO, e' stato sufficiente togliere le parentesi.
Ciao... Maurizio

 non si potesse fare.
Infatti. Usa JRO.

 Infatti. Usa JRO.
...
Ah, beh, questo non lo conosco neanche :-)
Me lo cerco sulla guida, tanto per curiosita'.
Ciao... Maurizio