20. marts 2006 - 05:27Der er
4 kommentarer og 2 løsninger
Slet data i db
Jeg har en Backend database som hvis den får lov at forsætte med at indsamle data, bliver for stor og for tung at køre. Den er allerede langsom med de data den har. (Den er kun på omkring 120 mb) Kan jeg lave en VBA eller Makro kørsel der sletter data i en db som er ældre en 30 dage fra dagsdato? Hvis ja, hvordan vil koden så se ud?
Det alene gør bare ikke databasen mindre - det kræver at du også komprimerer den og det er straks mere drilsk at gøre via kode.
Jeg har en overvågningsrutine der holder øje med størrelsen på nogle databaser og komprimerer dem hvis de overskrider en bestemt størrelse. Du får lige koden her:
Public Function Komprimer(ByVal vsFil As String, ByVal vlThreshold As Long) ' Formål : Foretager en komprimering af den angivne fil, hvis den har overskredet størrelsen ' angivet ved vlThreshold ' Parametre : ' vsFil : Navnet på filen der skal komprimeres ' vlThreshold : Den maksimale størrelse. Er filen mindre end Threshold skal der ' ikke gøres noget ' Dato : 9. juli 2001 Dim oFS As FileSystemObject Dim oFile As File Dim lOrgSize As Long Dim lNewSize As Long
On Error GoTo errHandle
Set oFS = New FileSystemObject
Set oFile = oFS.GetFile(vsFil) lOrgSize = oFile.Size
Set oFile = Nothing ' For at sikre at filen ikke er åben
If lOrgSize > vlThreshold Then If Dir(vsFil & "_cmp") <> "" Then Kill vsFil & "_cmp" ' Denne oprydning er nødvendig hvis komprimeringen gik galt sidst End If DBEngine.CompactDatabase vsFil, vsFil & "_cmp" ' Selve komprimeringen oFS.MoveFile vsFil, vsFil & "_tmp" ' Den oprindelige fil flyttes til en tmp-fil oFS.MoveFile vsFil & "_cmp", vsFil ' Den komprimerede fil ændres til at være den aktive Kill vsFil & "_tmp" ' Temp-filen slettes Else ' Filen skal ikke komprimeres - størrelsen er ikke overskredet. Ingen besked videre ' bare forlad Set oFS = Nothing Exit Function End If
' Komprimeringen er på plads og der skal ikke håndteres fejl. Opstår der fejl herefter ' gør det ikke så meget; der kommer bare ikke nogen statusmail On Error Resume Next
Set oFile = Nothing Set oFS = Nothing
Exit Function
errHandle:
' Indsæt fejlhåndtering End Function
Jeg har fjernet noget kode til afsendelse af adviserende mails, så koden ser lidt mishandlet ud.
Vær opmærksom på at komprimeringen skal foregå fra en anden database.
Synes godt om
Slettet bruger
21. marts 2006 - 01:41#4
jesperthomsen: Hvor skal jeg skrive navnet på db filen der skal komprimeres og hvor skal jeg skrive maksimal størrelsen på filen?
Jeg kan se at jeg skal skrive et eller andet med vsFil og vlThreshold, spørgsmålet er bare lige hvad?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.