Newsgroup: it.comp.appl.access
Titolo: dimensioni database

buongiorno.
ho un database che contiene tre tabelle con, rispettivamente,
26203, 209624 e 3.459.600 record. le dimensioni del file sono
887 MB.
tramite una procedura residente in un'altro file di access, sincronizzo
queso file con un suo gemello (per scrivere eventuali record mancanti), poi
copio tutti i record in un'altro mdb (ho provato tramite DAO e tramite SQL)
con identica struttura delle tabelle: alla fine i due archivi hanno le
stesse tabelle con gli stessi dati e lo stesso numero di record.
il file "duplicato" però è di UN (1) GigaByte. Qualcuno sa il perchè e,
soprattutto, come ridurre le dimensioni del file duplicato considerando che
Access non riesce a compattare mdb di questa dimensione?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato via 
http://arianna.libero.it/usenet/
La butto li, hai provato prima di compattare a ripristinare?
SunRex

 SunRex
Prego? Access 2000, menù strumenti>utilità database>compatta e ripristina
database...
che io sappia, non esiste la possibilità di ripristinare e poi compattare
l'mdb, nemmeno usando il VBA...


 l'mdb, nemmeno usando il VBA...
Sicuro?
Function CompactDB()
    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
    ChiudiForms
    FileDataBase = strPathDb
    Screen.MousePointer = 11
    TmpFile = "D:\TuaCartella\BackEnd" & "\data.tmp"
    DimIniziale = FileLen(FileDataBase)
    CompactDatabase FileDataBase, TmpFile
    If Dir$(TmpFile) <> "" Then
        Kill FileDataBase
        Name TmpFile As FileDataBase
    Else
        messaggio = "Errore durante la compressione del file"
        messaggio = messaggio + "Il Database non e' stato compresso"
        Screen.MousePointer = 0
        MsgBox messaggio, 48, "Attenzione"
        Exit Function
    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$(DimIniziale, "##,###,##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"
End Function
Sub ChiudiForms()
Dim NumForms As Integer, i As Integer
 NumForms = Forms.Count
 For i = NumForms - 1 To 0 Step -1
        If Forms(i).name = "frmMenu" Then
        Else
            DoCmd.Close acForm, Forms(i).name
        End If
 Next i
End Sub
Function BackUp()
Dim DirBackup As String
Dim DataBackup As String
Dim NomeFile As String
Dim StringaBackup As String
Dim strPath As String
intScelta = MsgBox("Effettuare il backup degli archivi?", vbApplicationModal
+ vbQuestion + vbYesNo)
If intScelta = vbNo Then
    Exit Function
Else
    If Dir("D:\TuaCartella\Backup\", vbDirectory) = "" Then
               MkDir ("D:\TuaCartella\Backup\")
    Else
        ChiudiForms
    End If
        DirBackup = "D:\TuaCartella\Backup\"
        DataBackup = Format(Date, "dd-mm-yyyy")
        NomeFile = DataBackup & "-backup" & ".mdb"
        StringaBackup = DirBackup & NomeFile
        strPathVirtualLab = "D:\VTuaCartella\BackEnd\TuoDB.mdb"
        FileCopy strPath, StringaBackup
        MsgBox "Backup degli archivi completato.", vbApplicationModal +
vbInformation + vbOKOnly
End If
End Function
Function Ripara()
On Error Resume Next
    ChiudiForms
    DBEngine.RepairDatabase "D:\TuaCartella\BackEnd\TuoDb.mdb"
    If Err = 0 Then
        MsgBox "Operazione completata!", vbInformation
    Else
        MsgBox "There was a problem repairing the database. (" & _
               Err.Description & ")", vbExclamation
    End If
End Function
SunRex


...cut...
studierò il codice (a proposito, grazie!), ma da una prima analisi anche tu
usi il metodo compactdatabase (dell'oggetto DBengine, immagino) che manda in
crisi access su db delle dimensioni che ho io... inoltre l'help on line di
access cita, alla voce repairdatabase: "Nota Il metodo RepairDatabase non è
più disponibile ma è elencato per compatibilità con le versioni precedenti.
Al suo posto utilizzare il metodo CompactDatabase."
e siamo da capo
LoZioPino


 ha scritto nel messaggio

Mi sa che è ora di migrare a SQL Server ;)
SunRex


Potessi................... :-)
