Avatar billede Slettet bruger
20. marts 2006 - 05:27 Der 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?
Avatar billede terry Ekspert
20. marts 2006 - 08:26 #1
You can delete records using something like this

DELETE FROM YourTable WHERE dato <= DateAdd("d",-30,Date())
Avatar billede terry Ekspert
20. marts 2006 - 08:30 #2
You could use this in the form open even of the first form you open

DoCmd.RunSQL "DELETE FROM YourTable WHERE dato <= DateAdd('d',-30,Date())"
Avatar billede jesperthomsen Nybegynder
20. marts 2006 - 10:10 #3
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.
Avatar billede 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?
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 07:27 #5
Det skal du i kaldet til rutinen. Kald den med Komprimer (<Databasenavn>, <MaxStørrelse>)

Rutinen kan ikke køre hvis databasen er åben - du skal have fuld adgang til den.
Avatar billede terry Ekspert
22. marts 2006 - 11:58 #6
thanks
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester