Avatar billede chrisrj Forsker
16. februar 2004 - 13:49 Der er 3 kommentarer og
1 løsning

Problem med forløkker og sql

Jeg laver nogle INSERTs, men hver INSERT bliver udført to gange.

Min kode:
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../database/cddb.mdb") & ";UID=admin;PWD=;"

rootpath = "f:\"
level = 0
Response.Write "Directory: " & rootpath & "<BR><BR>"
antalfiler = 0
antalmapper = 0
   
sub getPath(strPath,level)
    Set fsObj = CreateObject("Scripting.FileSystemObject")
    Set MainFolder = fsObj.GetFolder(strPath)
    Set Files = MainFolder.Files
    Set Folders = MainFolder.subfolders

    For Each Folder in Folders
        antalmapper = antalmapper + 1
        for a = 1 to level
            Response.Write "<IMG SRC=""spacerstreg.gif"">"
        next
        response.write "<IMG SRC=""folder.gif"">&nbsp;<B>" & folder.name & "</b><br>"
        call getPath(strPath & "\" & folder.name,level+1)
    next

    For Each File in Files
        antalfiler = antalfiler + 1
        for a = 1 to level
            Response.Write "<IMG SRC=""spacerstreg.gif"">"
        next
        response.write "<IMG SRC=""spacerny.gif"">" & file.name & ", "
        nysize = 0
        nysize = file.Size
        i = 0 '0=bytes ; 1=kbytes ; 2=Mbytes ; 3 = Gbytes
        do while nysize > 1024 and i < 3
          nysize = nysize / 1024
          i=i+1
        loop
        arr = split(nysize, ",")
        nysize = FormatNumber(arr(0),0,0,0,-1)
        if Ubound(arr)>=1 then
          nysize = nysize & "." & (left(arr(1), 2))
        end if
        'Sæt enten KB,MB eller GB
        Select case i
        case 0
            nysizeangiv = "B"
        case 1
          nysizeangiv = "KB"
        case 2
          nysizeangiv = "MB"
        case 3
          nysizeangiv = "GB"
        end select

        response.write "<b>" & nysize & " " & nysizeangiv & "</b> "
        sti = len(file.parentfolder)
        arr = split(file.parentfolder, "\")
        stien = ""
        if Ubound(arr)>=1 then
            for i = 0 to UBOUND( arr )
            next
            for j = 1 to (i-1)
                stien = stien & "\" & arr(j)
            next
        end if
        response.write stien & ", "   
        response.write file.Type & "<br>"
        sql[antalfiler] = "insert into filer (navn, storrelse, storrelseangivelse, type, sti) values('" & file.name & "', " & nysize & ", '" & nysizeangiv & "', '" & file.Type & "', '" & stien & "')"
        response.write "sql " & sql & "<br>"
        Conn.execute(sql)
    next
           
    set fsObj = Nothing
    set MainFolder = Nothing
end sub
   
call getPath(rootpath,level)
Response.write "antallet af mapper: " & antalmapper
Response.write " antallet af filer: " & antalfiler

Jeg havde tænkt på at smide INSERTsne ind i et array, men det kan jeg ikke liige få til at virke. Hvordan gør man det, og er løsningen? `
Hvis ikke, hvad så?
Avatar billede chrisrj Forsker
16. februar 2004 - 13:50 #1
..og er det løsningen?

Skulle der stå
Avatar billede nute Nybegynder
16. februar 2004 - 14:01 #2
ehh .. hvorfor skriver du :

sql[antalfiler] ??

hvorfor ikke blot:

sql = "insert into filer (navn, storrelse, storrelseangivelse, type, sti) values('" & file.name & "', " & nysize & ", '" & nysizeangiv & "', '" & file.Type & "', '" & stien & "')"

/nute
Avatar billede chrisrj Forsker
16. februar 2004 - 14:03 #3
Øhh, det er en rest af mit fejlslagne forsøg. :)

Resten ville se sådan ud:
call getPath(rootpath,level)
Response.write "antallet af mapper: " & antalmapper
Response.write " antallet af filer: " & antalfiler
for i = 0 to antalfiler
    Conn.execute(sql(i))
next

Altså efter forløkkerne er kørt igennem, men det kunne den ikke finde ud af. :-/
Avatar billede chrisrj Forsker
22. februar 2004 - 10:52 #4
lukket
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