Avatar billede taio Novice
09. oktober 2008 - 22:41 Der er 12 kommentarer og
1 løsning

Slette filer på disken fra access

Hej alle eksperter

Jeg har en mappe som indeholder filer hvor navn f.eks. er, data 031008, data 041008, data 051008, data 061008, data 071008, data 081008, jeg kunne godt tænke mig at slette de sidste 5 filer (efter dato) er det muligt fra access og hvordan.

På forhånd tak

Taio
Avatar billede mugs Novice
09. oktober 2008 - 22:58 #1
Kill Statement
     

Deletes files from a disk.

Syntax

Kill pathname

The required pathname argument is a string expression that specifies one or more file names to be deleted. The pathname may include the directory or folder, and the drive.

Har ingen erfaring med det, men ved dog at kommandoen hedder Kill. Hentet fra hjælpen:

Remarks

In Microsoft Windows, Kill supports the use of multiple-character (*) and single-character (?) wildcards to specify multiple files. However, on the Macintosh, these characters are treated as valid file name characters and can't be used as wildcards to specify multiple files.

Since the Macintosh doesn't support the wildcards, use the file type to identify groups of files to delete. You can use the MacID function to specify file type instead of repeating the command with separate file names. For example, the following statement deletes all TEXT files in the current folder.

Kill MacID("TEXT")

If you use the MacID function with Kill in Microsoft Windows, an error occurs.

An error occurs if you try to use Kill to delete an open file.

Note  To delete directories, use the RmDir statement.
Avatar billede fdata Forsker
09. oktober 2008 - 23:06 #2
Jeg går ud fra, at du med "de sidste 5 filer" mener dem med den højeste dato.
Her er VBA koden:

Sub SletFiler()
  Const AntalSletninger = 5
  Dim Mappe As String
  Dim d As String
  Dim Dato As Date
  Dim MaxDato As Date
  Dim Filnavn As String
  Dim i As Integer
 
  Mappe = "C:\Temp\DinMappe\"
 
  For i = 1 To AntalSletninger
    MaxDato = #12/24/2000#
    d = Dir(Mappe & "data *")
    Do
      Dato = DateSerial(Mid(d, 10, 2), Mid(d, 8, 2), Mid(d, 6, 2))
      If Dato > MaxDato Then MaxDato = Dato
      d = Dir
    Loop Until d = ""
    Debug.Print MaxDato
    Filnavn = "data " & Format(MaxDato, "ddmmyy")
    Kill (Mappe & Filnavn)
  Next i
End Sub

(husk lige backup af filerne inden du slipper koden løs!)
Avatar billede taio Novice
09. oktober 2008 - 23:15 #3
Tak for hurtig svar.

Jeg har måske forklaret mig forkert. _:-)

Den skal lade de sidste 5 filer ligge. Altså slette, data 031008, og lade resten blive, altså data 041008, data 051008, data 061008, data 071008, data 081008. Hvis der ligger <6 filer, skal den ikke slette noget.
Avatar billede fdata Forsker
10. oktober 2008 - 16:35 #4
Tjah, det var jo så lige det stik modsatte; men så spejlvender vi bare logikken:

Sub SletFiler()
  Dim Mappe As String
  Dim d As String
  Dim Dato As Date
  Dim MinDato As Date
  Dim Filnavn As String
  Dim i As Integer
  Dim AntalFiler As Integer
  Dim AntalSletninger As Integer
 
  Mappe = "C:\Temp\DinMappe\"
 
  AntalFiler = 0
  d = Dir(Mappe & "data *")
  Do
    AntalFiler = AntalFiler + 1
    d = Dir
  Loop Until d = ""
 
  AntalSletninger = AntalFiler - 5
  If AntalSletninger <= 0 Then Exit Sub
 
  For i = 1 To AntalSletninger
    MinDato = #12/24/2020#
    d = Dir(Mappe & "data *")
    Do
      Dato = DateSerial(Mid(d, 10, 2), Mid(d, 8, 2), Mid(d, 6, 2))
      If Dato < MinDato Then MinDato = Dato
      d = Dir
    Loop Until d = ""
    Filnavn = "data " & Format(MinDato, "ddmmyy")
    Kill (Mappe & Filnavn)
  Next i
End Sub
Avatar billede taio Novice
16. oktober 2008 - 16:59 #5
Jeg får en fejl ved, d = Dir
Avatar billede fdata Forsker
16. oktober 2008 - 19:08 #6
Mystisk. Hvilken fejl?
Avatar billede taio Novice
16. oktober 2008 - 23:21 #7
Run-time errpr '5'
Invalid procedure call or argument
Avatar billede fdata Forsker
16. oktober 2008 - 23:50 #8
Sorry. Min fejl. Jeg antog ud fra dit spørgsmål, at der altid var mere end 5 filer i mappen. Det er der tilsyneladende ikke.

Ny kode  (ikke testet):

Sub SletFiler()
  Dim Mappe As String
  Dim d As String
  Dim Dato As Date
  Dim MinDato As Date
  Dim Filnavn As String
  Dim i As Integer
  Dim AntalFiler As Integer
  Dim AntalSletninger As Integer
 
  Mappe = "C:\Temp\DinMappe\"
 
  AntalFiler = 0
  d = Dir(Mappe & "data *")
  Do Until d = ""
    AntalFiler = AntalFiler + 1
    d = Dir
  Loop

  If AntalFiler<6 Then
    MsgBox "Der er intet at slette", vbInformation, "Fundet: " & AntalFiler & " filer"
    Exit Sub
  End If
 
  AntalSletninger = AntalFiler - 5
  If AntalSletninger <= 0 Then Exit Sub
 
  For i = 1 To AntalSletninger
    MinDato = #12/24/2020#
    d = Dir(Mappe & "data *")
    Do Until d = ""
      Dato = DateSerial(Mid(d, 10, 2), Mid(d, 8, 2), Mid(d, 6, 2))
      If Dato < MinDato Then MinDato = Dato
      d = Dir
    Loop
    Filnavn = "data " & Format(MinDato, "ddmmyy")
    Kill (Mappe & Filnavn)
  Next i
End Sub

PS: Husk at rette mappenavnet til din egen mappe.
Avatar billede taio Novice
17. oktober 2008 - 01:43 #9
Får fejl ved Kill (Mappe & Filnavn)
File not found

Har husket at rette mappenavnet til.
Har lagt 8 backup med forskellige dato. "data 091008" osv. til "data 161008"
Avatar billede fdata Forsker
17. oktober 2008 - 18:09 #10
Hm. Jeg er lidt lost her.
Det må være muligt for dig at tjekke, om filen findes eller ej. Hvis du skyder en linie med
Debug.Print Mappe, Filnavn
ind før Kill, kan du se mappen og filnavnet i Immediate vinduet (Ctrl-G).
Det skulle jo meget gerne svare til stien og navnet på en af dine filer.
Avatar billede taio Novice
23. oktober 2008 - 11:16 #11
Tak for hjælpen, det var næsten rigtig. Fik rettet:
Dato = DateSerial(Mid(d, 14, 2), Mid(d, 12, 2), Mid(d, 10, 2))

Taio
Avatar billede fdata Forsker
23. oktober 2008 - 23:39 #12
Hm. Så var dine filnavne da vist lidt anderledes end skitseret her. Men pyt nu med det. Det vigtigste er at problemet blev løst.
Tak for point ;o)
Avatar billede taio Novice
24. oktober 2008 - 09:27 #13
God weekend og tak for hjælpen. :-)
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