Avatar billede tblaster Nybegynder
19. august 2006 - 13:48 Der er 2 kommentarer og
1 løsning

Funktion der finder parentid for et givent id

Jeg har et problem med en funktion. Kort fortalt har jeg en række menupunkter som har en ID og en ParentID, hvor ParentID'et angiver hovedkategoriern for kategorien.

Det min funktion så skal, er at finde alle ID'er på samtlige underkategorier (og deres underkategorier) til en kategori. Den skal kunne gå så mange trin ned som der er underkategorier til en kategori.

Pt. har jeg følgende kode:

Function FindIDer(ByVal ID)
    Dim idArr(1000)
    dim idArrIdx, sql0, rs0, sql1, inClause, dblCommaPos, rs1
    idArrIdx = 0
   
    sql0 = "SELECT id FROM kategorier WHERE ParentID = " & id
    Set rs0 = Conn.Execute(sql0)
   
    Do While Not rs0.EOF
        idArr(idArrIdx) = rs0("id")
        idArrIdx = idArrIdx + 1
        rs0.MoveNext
    Loop
   
    If idArrIdx <> 0 Then
        inClause = Join(idArr, ",")
        dblCommaPos = InStr(inClause, ",,")
        inClause = Left(inClause, dblCommaPos-1)
       
        sql1 = "SELECT id FROM kategorier WHERE ParentID IN (" & inClause & ") AND Aktiv = 1"
        Set rs1 = Conn.Execute(sql1)
       
        Do While Not rs1.EOF
            idArr(idArrIdx) = rs1("id")
            idArrIdx = idArrIdx + 1
            rs1.MoveNext
        Loop
    End If
   
    idArr(idArrIdx) = id
   
    inClause = Join(idArr, ",")
    dblCommaPos = InStr(inClause, ",,")
    inClause = Left(inClause, dblCommaPos-1)
   
    FindIDer = " Or ParentID=" & Replace(inClause, ",", " Or ParentID = ")
End Function

Men som det ses, så henter koden kun id'et på de første 2 trin af kategorien og ikke dem alle. Er der nogen der kan hjælpe med at ændre denne funktion til så den giver mig det jeg søger. Det skal jo nok være noget med at funktionen kalder sig selv igen og igen.
Avatar billede tblaster Nybegynder
20. august 2006 - 17:43 #1
Jeg har prøvet at arbejde lidt med det, og lavet en ekstra funktion for at løse problemet, men jeg får følgende fejl:
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

Her er mine 2 funktioner:
Function FindIDer(ByVal ID)
    Dim idArr(1000)
    dim idArrIdx, sql0, rs0, sql1, inClause, dblCommaPos, rs1
    idArrIdx = 0
   
    Arr = split(FindIDer2(ID), ",")
    For i = 0 to Ubound(Arr)
        idArr(idArrIdx) = Arr(i)
        idArrIdx = idArrIdx + 1
    Next
   
    inClause = Join(idArr, ",")
    dblCommaPos = InStr(inClause, ",,")
    inClause = Left(inClause, dblCommaPos-1)
   
    idArr(idArrIdx) = id
   
    inClause = Join(idArr, ",")
    dblCommaPos = InStr(inClause, ",,")
    inClause = Left(inClause, dblCommaPos-1)
   
    FindIDer = " Or ParentID=" & Replace(inClause, ",", " Or ParentID = ")
End Function

Function FindIDer2(ByVal ID)
    sql0 = "SELECT * FROM kategorier WHERE ParentID = " & ID
    Set rs0 = Conn.Execute(sql0)
   
    do while not rs0.eof and not rs0.bof
       
        DB_ID = rs0("ID")
        If str & "X" = "X" Then
            tmpstr = DB_ID
        Else
            tmpstr = tmpstr & "," & DB_ID
        End If
        tmpstr = tmpstr & "," & FindIDer2(DB_ID)
       
        rs0.movenext()
    loop
   
    FindIDer2 =  Replace(tmpstr, ",,", ",")
End Function

Og fejlen kommer i følgende linie:
rs0.movenext()

Håber der er nogen der kan finde fejlen, eller bruge ovenstående til at lave den funktion jeg skal bruge. Plz plz plz!
Avatar billede tblaster Nybegynder
20. august 2006 - 18:45 #2
Lukker. Fandt en anden løsning.
Avatar billede tblaster Nybegynder
20. august 2006 - 18:45 #3
.
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