Avatar billede willi Nybegynder
26. marts 2005 - 21:29 Der 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?
Avatar billede busschou Praktikant
27. marts 2005 - 08:27 #1
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
Avatar billede busschou Praktikant
27. marts 2005 - 08:29 #2
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
Avatar billede busschou Praktikant
27. marts 2005 - 08:32 #3
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
Avatar billede busschou Praktikant
27. marts 2005 - 08:41 #4
bare nysgerrighed
Når du indsætter i databasen så sætter du "dirNavn" lig med "filex"...
hvor kommer "filex" fra?
Avatar billede willi Nybegynder
27. marts 2005 - 12:17 #5
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...
Avatar billede willi Nybegynder
27. marts 2005 - 12:40 #6
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.

<%
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
                                           
            '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>
Avatar billede willi Nybegynder
27. marts 2005 - 12:46 #7
Efter: '" & objFileItem.name Skal der vel afsluttes med:  & "'"
Avatar billede willi Nybegynder
27. marts 2005 - 13:26 #8
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
Avatar billede busschou Praktikant
27. marts 2005 - 18:05 #9
jeg kan ikke se det ikke skulle virke umiddelbart
bortset fra jeg ville skrive
Do While Not rs.EOF
  bla bla
Loop
Avatar billede busschou Praktikant
27. marts 2005 - 18:09 #10
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
Avatar billede willi Nybegynder
27. marts 2005 - 18:26 #11
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
Avatar billede busschou Praktikant
27. marts 2005 - 20:11 #12
<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
                                    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>
Avatar billede busschou Praktikant
27. marts 2005 - 20:15 #13
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
Avatar billede willi Nybegynder
27. marts 2005 - 20:24 #14
Køre som smør  !!  ;)
Mange tak. Sender du et svar
Avatar billede busschou Praktikant
27. marts 2005 - 20:29 #15
selvfølgelig og undskyld den lange ventetid :o)
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