Avatar billede _et Praktikant
16. februar 2004 - 14:43 Der er 24 kommentarer og
1 løsning

filliste til database

Jeg ønsker at indlæse alle filnavne, fra en cd ind i en database.

Hvordan gør jeg det nemmest ?

Jeg har tænkt på at lave lykker inden i hinanden, men det kan jo hurtigt blive en kæmpe mudderkode, så hvis nogen har en god ide, så vil jeg gerne høre den.

Mvh. ET
Avatar billede martin_moth Mester
16. februar 2004 - 14:55 #1
Loop over alle filnavne - for hvert filnavn, tilføjer du til databasen...

Går ud fra at du selv kan finde ud af at smide dem i en database. Måden du finder ALLE filnavne på er fx. ved en rekursiv funktion, der kalder sig selv:


Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
DeleteFile ".txt", fso.GetFolder("c:\temp")


Private Sub FindFile(pattern As String, folder As Scripting.folder)
Dim tmpFolder As Scripting.folder
Dim tmpFile As Scripting.File
  If folder.SubFolders.Count > 0 Then
    For Each tmpFolder In folder.SubFolders
      FindFile pattern, tmpFolder
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      If lcase(right(tmpFile.Name,4)) = lcase(pattern) Then
        'TILFØJ tmpfile.Name TIL DATABASE
      End If
    Next
  End If
End Sub

Du kan jo omskrive, hvis du ikke behøver et pattern.
Avatar billede nute Nybegynder
16. februar 2004 - 15:05 #2
hmm ... den nemmeste måde er jo simpelthen:

Sub iterateFolder(p_strFolder As String)
    Dim objFSO As FileSystemObject
    Dim objFolder As Folder
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(p_strFolder)
   
    For Each subFolder In objFolder.SubFolders
        iterateFolder (subFolder.Path)
    Next
   
   
    If (Not IsEmpty(objFolder.Files)) Then
        For Each objFile In objFolder.Files
            ' INSERT INTO DATABASE
        Next
    End If
End Sub

denne kalder du så med:

Call iterateFolder("c:\en folder")

Husk at lave en reference til "Microsoft Scripting Runtime" i dit projekt

/nute
Avatar billede nute Nybegynder
16. februar 2004 - 15:07 #3
denne check:

If (Not IsEmpty(objFolder.Files)) Then

er strengt taget ikke nødvændig ...

For Each subFolder In objFolder.SubFolders
    iterateFolder (subFolder.Path)
Next
   
For Each objFile In objFolder.Files
    ' INSERT INTO DATABASE
Next

er nok
Avatar billede _et Praktikant
16. februar 2004 - 15:10 #4
Fancy.

"folder As Scripting.folder" Hvordan bruges denne var ?

sådan her ?
FindFile("*.*", DIR.Path)
Avatar billede _et Praktikant
16. februar 2004 - 15:11 #5
Det er ellers en meget cool måde - Jeg havde nok lavet den 10 gange så stor :-)
Avatar billede _et Praktikant
16. februar 2004 - 15:12 #6
nute --> Hvordan gør jeg det ??
Husk at lave en reference til "Microsoft Scripting Runtime" i dit projekt
Avatar billede nute Nybegynder
16. februar 2004 - 15:15 #7
Menuen 'Projekt > references" og så vælger du "Microsoft Scripting Runtime" fra listen

/nute
Avatar billede martin_moth Mester
16. februar 2004 - 15:25 #8
Hov - bruger du min løsning (som er 99% identisk med den fra nute) så ret lige

fra
  DeleteFile ".txt", fso.GetFolder("c:\temp")
til
  FindFile ".txt", fso.GetFolder("c:\temp")

Det er en gammel rutine der sletter filer, jeg har omskrevet. Derfor :o)

Hvis du ikke vil bruge pattern, sletter du bare IF-sætningen i FindFile functionen
Avatar billede _et Praktikant
16. februar 2004 - 15:26 #9
Jeg får en runtime error type 13 - type mismatch  i denne linje ?

    Set objFolder = objFSO.GetFolder(p_strFolder)
Avatar billede martin_moth Mester
16. februar 2004 - 15:28 #10
Jeg omskriver lige min løsning, så den er til at bruge via Copy-Paste

Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
PutFilesInDatabase fso.GetFolder("c:\temp")


Private Sub PutFilesInDatabase(folder As Scripting.folder)
  Dim tmpFolder As Scripting.folder
  Dim tmpFile As Scripting.File
  If folder.SubFolders.Count > 0 Then
    For Each tmpFolder In folder.SubFolders
      PutFilesInDatabase tmpFolder '< BEMÆRK - funktionen kalder sig selv. Det er det smarte :o)
    Next
  End If
  If folder.Files.Count > 0 Then
    For Each tmpFile In folder.Files
      'TILFØJ tmpfile.Name TIL DATABASE
    Next
  End If
End Sub
Avatar billede martin_moth Mester
16. februar 2004 - 15:29 #11
Husk at lave en reference til "Microsoft Scripting Runtime" i dit projekt
Avatar billede _et Praktikant
16. februar 2004 - 15:44 #12
martin_moth --> Det virker skide godt :-)

også tak til nute, jeg kunne desværre ikke få det til at virke
Avatar billede nute Nybegynder
16. februar 2004 - 15:49 #13
det gør ikke noget. jeg kom jo alligevel for sent ;o] jeg får det hvertfald til at fungere, sååå ...

/nute
Avatar billede mikker Nybegynder
16. februar 2004 - 18:06 #14
- Og SÅ skal der godkendes et svar :o)

- Mikker
Avatar billede martin_moth Mester
16. februar 2004 - 19:37 #15
nute: Vi kan da godt dele
Avatar billede nute Nybegynder
17. februar 2004 - 09:40 #16
martin_moth >> det er helt i orden. jeg var jo også 10 minutter senere end dig ... jeg får tage "straffen" for at ikke refreshe inden jeg poster et svar :o]

/nute
Avatar billede martin_moth Mester
17. februar 2004 - 09:51 #17
Skam dig!

:o)
Avatar billede nute Nybegynder
17. februar 2004 - 09:56 #18
det gør jeg også ... GRR !!

;o]
Avatar billede martin_moth Mester
17. februar 2004 - 09:59 #19
Jeg fik 60 p, du fik ingen!!!!

Naa na-na-naaaaaa na!!!
Avatar billede nute Nybegynder
17. februar 2004 - 10:02 #20
buhuu ... drilling er ikke sjov :,(

men jeg havde den bedste løsningen ... hehe ...

;-)
Avatar billede martin_moth Mester
17. februar 2004 - 10:42 #21
Nååå - havde du nu det?
:o)

Over & out, Martin
Avatar billede nute Nybegynder
17. februar 2004 - 10:52 #22
;o]

over and out ...
Avatar billede mattiasdh Nybegynder
16. maj 2006 - 20:34 #23
Hvordan laver man en database?
Avatar billede martin_moth Mester
17. maj 2006 - 10:36 #24
Du skal bruge en ovn, gær, mel og en masse data... Nej - prøv i et nyt spørgsmål, i stedet for et 2 år gammelt lukket et!

og vær lidt mere konkret
Avatar billede mattiasdh Nybegynder
17. maj 2006 - 14:36 #25
Nånånånå..
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
Kurser inden for grundlæggende programmering

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