02. august 2004 - 23:45Der er
5 kommentarer og 1 løsning
Placering af dim ved rekursiv function
Nedenstående rekursive funktion kalder en sub-routine. Fejlen i browseren er "Invalid procedure call or argument: 'Mid'" Min fejltestning har i det mindste afsløret, at det har noget at gøre med dim'erne. Men uanset hvor jeg placerer dem, vil det ikke lykkes :-(
Dim Open, OpenEnd, OpenID, arrPageID, arrParentID, arrTitle, arrPublic
Open = "23-1-"
Sub FirstOpen Open = replace(Open,"#-","") OpenEnd = Instr(Open,"-") OpenID = Mid(Open,1,OpenEnd-1) End Sub
'arrays med data arrPageID = Split(arrPageID,"#") arrParentID = Split(arrParentID,"#") arrTitle = Split(arrTitle,"#") arrPublic = Split(arrPublic,"#")
'Funktion som undersøger for undersider Function Sider(intID)
For m = 1 to Ubound(arrPageID)
' Hvis underside til den side som funktionen er kaldt med If Cint(arrParentID(m)) = Cint(intID) Then
if Open <> "" then Call FirstOpen
if OpenID = arrPageID(m) then Sider = Sider & "<img src=""minus.gif"">" else Sider = Sider & "<img src=""plus.gif"">" end if
Open = replace(Open,""& OpenID &"","#") else
Sider = Sider & "<img src=""plus.gif"">" end if end if
Sider = Sider & ""& arrTitle(m) &""
Sider = Sider & Sider(arrPageID(m))
End If Next End Function
'Kald funktionen med alle niveau0-sider Response.Write Sider(0)
Fejlken kommer fordi en af parameterne i mid bliver mindre eller lig 0.
Umiddelbart gør du en fejl her hvor du fjerne ID'et du kan let komme til at fjerne meget mere end du tror:
Open = replace(Open,""& OpenID &"","#")
Hvis Open er lig "2-23-3-" Så fjerner du ID=2 så vil open se sådan her ud "#-#3-3-". Det man typisk vil gøre er at sikre at man har skille tegn før og efter tallet. Open skulle se sådan her ud: "-2-23-3-" Så replacer man "-ID-" , med "-" Samme eks man har Open="-2-23-3-" og replcer "-2-" med "-" så ser open sådan her ud: "-23-3-" altså 2 er fjerne og der er stadig start og slut tegn imelem ID'erne. Så prøv at rette den replace linje til:
Open = replace(Open,"-"& OpenID &"-","-")
og lav det sådan Open ser sådan her ud: Open = "-23-1-"
Der ud over kan du lave funktion FirstOpen lidt om sådan den ikke kan fejle med en if sætning:
Sub FirstOpen Open = replace(Open,"--","") OpenEnd = Instr(Open,"-") if OpenEnd>0 then OpenID = Mid(Open,1,OpenEnd-1) else OpenID = "fejl" end if End Sub
Så skal denne if sætning laves lidt om: if Open <> "" then
For nu kan Open være tom ved der er en bindestreg i den: if Open <> "" and Open <> "-" then
Det heller ikke helt godt.... For den vil stadig fejle med mid.
Lad open se sådan her ud endnu:
Open = "23-1-"
Den før nævnte replace linje laver du sådan her:
Open = replace("-"&Open,"-"& OpenID &"-","#-")
Og laver FirstOpen om til denne: Sub FirstOpen Open = replace(Open,"#-","") OpenEnd = Instr(Open,"-") if OpenEnd>0 then OpenID = Mid(Open,1,OpenEnd-1) else OpenID = "fejl" end if End Sub
Tak for hjælpen! Jeg har prøvet at gennemgøre ændringerne.. siden melder ikke længere fejl, men gør ikke det forventede (med plus/minus.gif) Jeg tænker ikke helt klart længere pga tidspunktet, så det er vist bedre at jeg tester nærmere i morgen :-) Jeg vender tilbage!
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.