26. marts 2005 - 21:29Der er
14 kommentarer og 1 løsning
Udvælgelse via løkke
Denne fungere rigtig godt. Der vælges filer fra den aktuelle folder som udskrives til skræm. <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/Data/bildTest.mdb") Conn.Open DSN %> <html> <head> <title></title> <META NAME=""ROBOTS"" CONTENT=""NOINDEX, NOFOLLOW""> <link rel="stylesheet" href="stil.css" type="text/css"> </head> <body bgcolor="#f0f0f0" > <table> <tr> <td> <% strPathInfo = Request.ServerVariables("PATH_INFO") strPhysicalPath = Server.MapPath(strPathInfo) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strPhysicalPath) Set objFolder = objFile.ParentFolder Set objFolderContents = objFolder.Files For Each objFileItem in objFolderContents if InStr(1, "gif,jpg,jpeg,png", LCase(objFSO.GetExtensionName(objFileItem.name))) > 0 then Response.write "<a href=" Response.Write(objFileItem.Name) response.write ">" Response.Write(objFileItem.Name & "<br>") Response.write "</a>" strSQL = "Insert into bildArkiv (filNavn,dirNavn) values('" & objFileItem.name & "', '" & filex & "')" Conn.Execute(strSQL) End if Next %> </body> </html> ... mit problem er at der skal en løkke ind som sikre at filer der allerede ligger i db ikke én gang mere registreres. Derfor en eller anden kontrol:
if InStr(1, "gif,jpg,jpeg,png", LCase(objFSO.GetExtensionName(objFileItem.name))) > 0 then
strSQL = "Select * From bildArkiv" Set rs = Conn.Execute(strSQL) if rs("filNavn")=objFileItem.name Then Response.Write rs("Filen findes allerede") rs.MoveNext End if
Else Response.Write ("Der indsættes følgende nye filer")
...men som ikke virker. Nogen som kan hjælpe med dette?
i stedet for en løkke så kunne du jo prøve med en count altså noget ala strSQL = "Select Count(*) From bildArkiv" Set rs = Conn.Execute(strSQL) if rs(0) > 0 then response.write "filen er der" else response.write "filen er der ikke" end if ------------------------------- Husk at sætte det op i din loop! Send evt hele din kode herind da du også har en slåfejl ------------- if rs("filNavn")=objFileItem.name Then Response.Write rs("Filen findes allerede") rs.MoveNext End if ------------- skal jo være ------------- if rs("filNavn")=objFileItem.name Then Response.Write ("Filen findes allerede") rs.MoveNext End if
og jeg vrøvler det skal selvfølgelig være strSQL = "Select Count(*) From bildArkiv Where filNavn = '" & objFileItem.name & '" Er lige pt i tvivl om enkelt pling er nødvendig eller ej
en anden ting du kan gøre hvis du udelukkende bruger filnavnet som et krav for om en post må indsættes eller ej Det er jo at gøre "filNavn" unikt i din database og ikke tillade dubletter
filex kom herfra: <%filex=server.mappath("\")%> <%filex=server.mappath(".asp")%> <%nVar = instrrev(filex,"\")%> <%filex=left(filex,nVar-1)%> <%nVar = instrrev(filex,"\")%> <%filex=right(filex,len(filex)-nVar)%> ...men den er slettet til fordel for FileSystemObject metoden som eagleeye kom med. Den skal naturligvis også væk fra insert into.... Men jeg ser lige på hvad det er du skriver ellers...
Her er koden. Den fungerer fint. Men indsætter naturligvis hvergang alle filer i db. Som sagt skal den kun indsætte filer i db som ikke findes i db men som er blevet placeret i folderen efter sidste opdatering.
strPathInfo = Request.ServerVariables("PATH_INFO") strPhysicalPath = Server.MapPath(strPathInfo) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strPhysicalPath) Set objFolder = objFile.ParentFolder Set objFolderContents = objFolder.Files For Each objFileItem in objFolderContents if InStr(1, "gif,jpg,jpeg,png", LCase(objFSO.GetExtensionName(objFileItem.name))) > 0 then
'løkken her (?)
Response.write "<a href=" Response.Write(objFileItem.Name) response.write ">" Response.Write(objFileItem.Name & "<br>") Response.write "</a>" strSQL = "Insert into bildArkiv (filNavn,dirNavn) values('" & objFileItem.name & "', '" & objFolder & "')" Conn.Execute(strSQL) end if Next %> </td> </tr> </table> </body> </html>
Jeg får ikke din til at køre. Kan heller ikke gennemskue loop'et. Men er princippet ikke nogenlunde sådan?
'løkken her (?)
'vælg tabel i db bildTest.mdb /strSQL = "Select * From bildArkiv" 'vælg tabel i db bildTest.mdb 'slut forbindelse til db til /Set rs = Conn.Execute(strSQL) 'hvis filNavn i db ikke er tom /while not rs.eof 'sammenlign filNavn med objFileItem.name /if rs("filNavn")=objFileItem.name Then 'når de er ens /response.write rs("filNavn") >og< objFileItem.name> er ens < 'gå til næste post /next 'er de ikke ens /Else 'gå til indsæt i database /strSQL = "Insert into bildArkiv (filNavn,dirNavn) values('" & objFileItem.name & "', '" & objFolder & "')" 'afslut sammenligning /end if
strSQL = "Select * From bildArkiv" Set rs = Conn.Execute(strSQL) fundet = False Do While Not rs.EOF if rs("filNavn") = objFileItem.name then fundet = True end if Loop if Not fundet then strSQL = "Insert into bildArkiv (filNavn,dirNavn) values ('" & objFileItem.name & "','" & objFolder & "')" Conn.Execute(strSQL) else response.write("filen eksisterer allerede") end if
Så ser den vel sådan ud... <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/Data/bildTest.mdb") Conn.Open DSN %> <html> <head> <title></title> <META NAME=""ROBOTS"" CONTENT=""NOINDEX, NOFOLLOW""> <link rel="stylesheet" href="stil.css" type="text/css"> </head> <body bgcolor="#f0f0f0" > <table> <tr> <td> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/data/bildTest.mdb") Conn.Open DSN
strPathInfo = Request.ServerVariables("PATH_INFO") strPhysicalPath = Server.MapPath(strPathInfo) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strPhysicalPath) Set objFolder = objFile.ParentFolder Set objFolderContents = objFolder.Files For Each objFileItem in objFolderContents if InStr(1, "gif,jpg,jpeg,png", LCase(objFSO.GetExtensionName(objFileItem.name))) > 0 then strSQL = "Select * From bildArkiv" Set rs = Conn.Execute(strSQL) fundet = False Do While Not rs.EOF if rs("filNavn") = objFileItem.name then fundet = True end if Loop if Not fundet then strSQL = "Insert into bildArkiv (filNavn,dirNavn) values ('" & objFileItem.name & "','" & objFolder & "')" Conn.Execute(strSQL) else response.write("filen eksisterer allerede") end if end if Next %> </td> </tr> </table> </body> </html>
Men får så denne: Udførelsen af et script overskred tidsgrænsen
strPathInfo = Request.ServerVariables("PATH_INFO") strPhysicalPath = Server.MapPath(strPathInfo) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.GetFile(strPhysicalPath) Set objFolder = objFile.ParentFolder Set objFolderContents = objFolder.Files For Each objFileItem in objFolderContents if InStr(1, "gif,jpg,jpeg,png", LCase(objFSO.GetExtensionName(objFileItem.name))) > 0 then strSQL = "Select * From bildArkiv" Set rs = Conn.Execute(strSQL) fundet = False Do While Not rs.EOF if rs("filNavn") = objFileItem.name then fundet = True end if rs.movenext Loop if Not fundet then strSQL = "Insert into bildArkiv (filNavn,dirNavn) values ('" & objFileItem.name & "','" & objFolder & "')" Conn.Execute(strSQL) else response.write("filen eksisterer allerede") end if end if Next %> </td> </tr> </table> </body> </html>
Der er vist ingen grund til at connecte to gange Tror måske den gik i time out fordi jeg havde glemt at lave en rs.movenext Så går den jo selvfølgelig i uenelig løkke
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.