13. januar 2004 - 23:46Der er
9 kommentarer og 1 løsning
List og opret filer fra mappe i DB
Hejsa.
Jeg har en masse filer som jeg gerne vil have listet i en database. Der er tale om ca. 4000 filer, så det ville jeg nødig gøre manuelt :)
Jeg fandt noget kode her på eksperten som fint lister filer fra en mappe alfabetisk:
<% strPath = Server.MapPath(".") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(strPath) set f = Server.CreateObject("Scripting.Dictionary") For Each objFile In objFolder.Files f.add objFile.Name,1 Next
a = f.keys() for i=ubound(a)-1 to lbound(a) step -1 for j=0 to i if a(j)>a(j+1) then tmp=a(j):a(j)=a(j+1):a(j+1)=tmp next next for i=lbound(a) to ubound(a) response.write a(i) & "<br>" next
%>
men jeg ønsker at oprette listen i en database, hvor hver fil får navn, filetype og størelse. Jeg ved er ingen haj til asp så jeg ved ikke om dette er for meget at forlange.
Jeg har leget, at der er en database ved navn database.mdb. I denne database er en tabel, ved navn filer, som indeholder felterne id (autonummerering) (fordi et id felt altid er godt at have), filnavn (tekst), filtype (tekst) og filstorrelse (tal).
Det vil måske være en fordel at tilføje et
response.Write "filerne er nu tilføjet i databasen"
nederst i scriptet, så du kan se, at den har gjort noget.
Det sidste du lige skal være opmærksom på er, at der tilføjes en ny record for hvert loop. Det vil sige, at hvis du kører scriptet to gange bliver filerne ikke overskrevet, men derimod tilføjet igen. Det kan der dog gøres noget ved, hvis det skulle være nødvendigt.
Værsågod. Nu overskriver den, hvis der findes en fil med samme filnavn i db'en, og hvis ikke, så opretter den en ny post.
<%
If request.Querystring("dir") <> "" Then dir = "/" & request.Querystring("dir") else dir = "/" End if
Dim myFso Set myFso = Server.CreateObject("Scripting.FileSystemObject")
Dim myFolder Set myFolder = myFso.GetFolder(Server.MapPath(dir))
Dim files Set files = myFolder.Files
Set rs = Server.CreateObject("ADODB.RecordSet") Set Conn = Server.CreateObject("ADODB.Connection") strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("database.mdb") Conn.Open strDSN
For Each file in files strSQL = "SELECT * FROM filer WHERE filnavn = '" & file.name & "'" rs.open strSQL, conn, 2, 2 If (rs.eof or rs.bof) then rs.addNew end if rs("filnavn") = file.Name rs("filtype") = file.Type rs("filstorrelse") = file.Size rs.update rs.Close Next
response.Write "Databasen er nu opdateret"
set rs = nothing Conn.close set Conn = nothing Set files = Nothing Set subFolders = Nothing Set myFolder = Nothing Set myFso = Nothing
Prøv at højreklik på din database og gå i properties. Hvis read-only er slået til, så slå den fra. Det burde det naturligvis ikke være, når du nu lige har brugt den, men mærkeligere ting er sket, så måske...
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.