16. februar 2004 - 14:43Der 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.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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.
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
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
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]
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.