Jag har loopat in informationen ur en textfil till en access databas. textfilens orginal storlek är 176kb och databasen var 5700kb efter att jag hade loopat in informationen. Om jag efter det komprimerade databasen med hjälp av Access så var storleken lite mera lämplig, 464kb. Jag undrar nu om det finns några nackdelar med att komprimera en databas? Går det långsammare att läsa/skriva till databasen och i så fall hur mycket? Är där några andra nackdelar med att komprimera en databas? Utan att vara helt säker så behöver du inte fundera på att det går långsammare om du komprimerar - tvärt om. Däremot är jag lite fundersam på att du använder 4 memofält i en och samma tabell. Det verkar i det mesta laget. Varje sådant fält tar 16 tecken i tabellen så även om de är tomma tar dess referens 64 bytes. Komprimeringen är egentligen ett sätt att tömma bort lite luft ur databasen som du just märkte. Datats lagring förändras inte och inte heller tiden för att hämta information. Jag har gjort en funktion som jag brukar använda mig av för att reparera och komprimera en databas, så om du inte vill skriva en egen kan du använda denna. Tack bägge två! Hej!!Komprimering av databas
Och det viktigaste: Hur komprimerar jag databasen om jag vill göa det med kod?
Ps. I detta fallet innehåller databasen en tabell med 12 fält där av 8 är datatypen text och de 4 resterande datatypen Memo.
/CythSv: Komprimering av databas
För att komprimera en tabell så finns en kontroll som heter ADOX och i referens ligger den med Microsoft ext 2.1 Library. Denna har funktionen compactdatabas och kan användas.
/PelleSv: Komprimering av databas
<code>
Function kompr(sokvag As String)
On Error GoTo errorrepkomp
DBEngine.RepairDatabase sokvag
If Dir(sokvag & ".bak") <> "" Then MsgBox "Filen " & sokvag & ".bak finns redan!", 16: End
DBEngine.CompactDatabase sokvag, sokvag & ".bak"
If Dir(sokvag & ".bak") = "" Then MsgBox "Något gick snett vid komprimeringen...", 16: End
Kill sokvag
FileCopy sokvag & ".bak", sokvag
Kill sokvag & ".bak"
Exit Function
errorrepkomp:
MsgBox Error$, 48: End
End Function
</code>
Titta noga hur den fungerar så du förstår vad som händer om något skulle gå snett.
/JohanSv: Komprimering av databas
Som du säger Johan, det är absolut ingen mening med att bara kopiera kod, man ska förstå den också.
/CythSv: Komprimering av databas
Höll på med samma sak och märkte en underlig sak. Om man använder Jet objektet och komprimera databasen sabbar det sorteringen. Dvs söker du information i databasen och sortera på tex efternamn, hamnar Ö som O och Ä som A osv. Därför tycker jag att det är bättre att använda DAO.DBEngine för att komprimera databasen. I deras funktion CompactDatabase kan man välja vilket språk databasen ska sortera efter när den är komprimerad.
Så här gör jag:
Private Sub CompactDatabase()
On Error GoTo ErrorHandler
Dim DAOObj As New dao.DBEngine
Source = "sökväg till databas"
Temp= "sökväg till temp databas"
'Ta bort temp databas om den redan finns
If Dir(Temp) <> "" Then Kill Temp
'dbLangSwedFin står för vilket språk
DAOObj.CompactDatabase Source, Temp, dbLangSwedFin
FileCopy Temp, Source
Kill Temp
ErrorHandler:
End Sub
Klart!!
Efter denna komprimering funkar det att sortera på å,ä,ö.
//Kristoffer