<body> <% Sub FindSubC(byval rs, byval Parent, byval u) Dim rsWhere rs.MoveFirst While Not rs.EOF If (rs(\"Parent\") = Parent) Then rsWhere = rs.AbsolutePosition response.write \"ID: \" & rs(\"ID\") & \" - Parent: \" & Parent & \" - u: \" & u & \"<br>\" Call FindSubC(rs, rs(\"ID\"), u+1) i = rsWhere - 1 rs.Move i, 1 End If rs.MoveNext Wend End Sub
Jeg er endnu ikke helt med på hvad du egentligt foretager dig i scriptet. Så vidt jeg ved kan man ikke overføre recordset byval. Derfor vil du hver gang du kalder funktionen sætte pointeren til den første position. prøv at fjerne rs.movefirst. Hvad sker der så?
Prøv at lave en Response.Flush lige efter Response.Write\'n i den sub, og Copy\'n\'Paste så en 5-10 linier her på Eksperten. Det gør det lidt nemmere at dekode hvad den gør ;-)
Jeg har lige fået dit kode op at køre her hos mig, så forvent et *ordentligt* svar i løbet af en time eller to (ska\' li\' ha\' no\'et at æde først ;-)
Problemet var at AbsolutePosition ikke kunne bestemme hvor i Recordset\'et den stod (blev ved med at returnere -1) og jeg har derfor lavet positionsbestemmelsen manuel istedet.
<% Function FindSubC(rs, Parent, u) Dim rsWhere Dim intPos
rs.MoveFirst intPos = 1
Do While Not rs.EOF If CInt(rs(\"Parent\")) = Parent Then response.write \"ID: \" & rs(\"ID\") & \" - Parent: \" & Parent & \" - u: \" & u & \"<br>\" Response.Flush
FindSubC rs, CInt(rs(\"ID\")), u+1
rs.Move intPos-1, 1 End If
intPos = intPos +1 rs.MoveNext Loop End Function
\'Create database connection Set cnnGuroNot = Server.CreateObject(\"ADODB.Connection\") cnnGuroNot.Open Application(\"strDSN\")
Set rs = Server.CreateObject(\"ADODB.Recordset\") rs.Open \"tblGuroNot\", cnnGuroNot, adOpenKeyset, adLockOptimistic
\"ID\";\"Name\";\"Description\";\"Parent\" 2;\"Videofilm\";\"Mangler du en god film til en kold regnvejrsaften? Så kig her og find lige netop den film du gerne vil se.\";0 3;\"Computerspil\";\"Alle som interesserer sig for computerspil kan ganske sikkert finde noget interessant her.\";0 4;\"Bøger\";\"Hvis du godt kan lide at læse bøger er dette måske lige stedet for dig.\";0 6;\"Bilspil\";\"\";3 7;\"Strategispil\";;3 8;\"Sportsspil\";;3 12;\"Bøger om mad og drikke\";\"\";4 13;\"Computerbøger\";\"\";4 14;\"Ordbøger\";\"\";4 15;\"Bøger om programmering\";\"\";13 16;\"Computerbøger for begyndere\";\"\";13 17;\"Bøger om Active Server Pages\";\"\";15 18;\"Bøger om C++\";\"\";15 19;\"Bøger om HTML / JavaScript\";\"\";15 20;\"Actionfilm\";\"\";2 21;\"Dramafilm\";\"\";2 22;\"Komediefilm\";\"\";2 23;\"Dokumentarfilm\";\"\";2 25;\"Action GameZ\";\"GameZ, GameZ and more GameZ\";3 26;\"1321321\";\"13621651\";12
Fjern lige den der \"on error resume next\" og se om den ikke spytter en fejlmeddelelse ud så.
\"u\"\'eren er faktisk også meget rar, du kan bruge den til at indente dine menuer vha. fx. følgende kode: response.write String(u,\"+\") & \" ID: \" & rs(\"ID\") & \" - Parent: \" & Parent & \" - u: \" & u & \"<br>\"
Aaaaah, du har ændret i den måde du åbner dit recordset på ;-)
Lav det om til det her: \'Create database connection Set Conn = Server.CreateObject(\"ADODB.Connection\") strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"shop.mdb\") Conn.Open strDSN strSQL = \"SELECT * FROM Categories\" Set rs = Server.CreateObject(\"ADODB.Recordset\") rs.Open strSQL, Conn, 1
....den \", 1\" eller \", adOpenKeyset\" er ret vigtig, den specificerer det der hedder en \"cursor\".
Uden parametren vil du få åbnet et recordset med en såkaldt \"adForwardOnly\"-cursor - altså et recordset hvor man kun kan bevæge sig fremad - og det er derfor du får en fejl i rs.Move linien.
En adOpenKeyset cursor (adOpenKeyset er en konstant defineret i adovbs.inc, den er lig med 1) derimod vil tillade dig at hoppe frem og tilbage i et recordset lige så tosset som du vil, den er så tilgengæld langsommere at benytte.
Jeg har fundet ud af at man også skulle angive en LockType.. rs.Open strSQL, Conn, 1, 1 det sidste 1 er adLockReadOnly Jeg har ikke prøvet om der er andre locks der virker..
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.