Har nedanstående rekursiva funktion, dock funkar den bara fram till första barnet.
Den skriver ut avdelningar i ett förtag där topnoden är objektidforalder = NULL
Sub Recursive(obsRs,ParentId, n)
Set rs = obsRs
rs.Filter = "ObjektIdForalder=" & ParentId
rs.Sort = "ObjektNamn"
while not rs.eof
response.write Writestring(" ",n) & rs.fields("ObjektNamn") & "<br />"
' Response.Write "<option value=""" & rs.fields("ObjektId") & """>" & Writestring(" ",n) & rs.fields("ObjektNamn") & "</option>"
Recursive obsRs, rs.fields("ObjektId"), n + 1
if not rs.eof then
rs.movenext
end if
Wend
End Sub
' skriv ut avdelningar.
Recursive obsRs,"NULL",0
Skrev om denna till ASP
function menu($child_of){
if (!isset($child_of)){
$child_of = 0;
}
$SQL = "SELECT kategoriID, kategori, tkategoriID FROM kategorier WHERE tkategoriID = " . $child_of . "";
$result = mysql_query($SQL) or die(mysql_error());
while ($data = mysql_fetch_array($result)){
echo $data[1]."<br>";
menu($data[0]);
}
}
echo menu(0);
Med skillnaden att jag skickar med ett recordset som innehåller alla poster, som jag sedan filterar med Filter efter barnen..
Men den funkar inte. Kommenterar jag bort delen:
Recursive obsRs, rs.fields("ObjektId"), n + 1
Så skriver den ut alla barn i första nivån under föräldern med NULL som objektidforalder, dvs företagsnamnet.
det har ingen betydelse i detta fall... den skriver bara ut första barnet, trots att root har fler barn en så... sen har givetvis en del av dessa barn ex. antal barn...
Är det inte så att objRs skickas som referens i subanropen, och att då samtliga operationer på det inte sker på någon lokal kopia utan "hänger med", så att säga. T.ex. begränsas väl urvalet i recordsetet mer och mer ju fler gånger du skriver till Filter.
Och sedan lägger obsRs som referens i nästa anrop, att den rs skulle vara en lokalkopia av obsRs som jag kan göra filter på, utan att det skadar obsRs så att säga. :OO
"Set" skapar bara en pekare till ett objekt i minnet.
Det går tyvärr inte att kopiera ett objekt så det blir två.
rs och obsRs pekar bara på exakt samma objekt.
"Set" skapar bara en pekare till ett objekt i minnet.
Det går tyvärr inte att kopiera ett objekt så det blir två.
rs och obsRs pekar bara på exakt samma objekt.
Ja men då förklarar det biffen... då måste jag modda det lite granna...
Trots moddningen, så ja, det blev inge bättre nu får jag felmeddelande med:
fel '80020009'
, och att den då skriver ut topnoden endast, sen ser man felet.
Och denna gång skickar jag med som referense det objekt som gör att jag kan hämta
recordset på nytt för varje.. men men, det blev ju inte bättre.. :s
Kanske skulle kunna läsa igenom hela recordsetet till en javascript array, och använda javascript för att skriva ut trädet med avdelningarna... för detta blir jag inte klok på.
Nu ser rs ut så här:
Set rs = objStructure.GetStructure("ORGANISATION", organisationcode)
Där objStructure är ett server.objekt som är skrivet i VB och anropar procedurer från en sql-server.
server.objektet är det inget fel på, den returnerar det recordset som jag behöver, men något sker när den används rekursivt.
Sub Recur(parentid,level)
Set obsRs = objStructure.GetStructure("ORGANISATION", organisationcode)
obsRs.Filter = "ObjektIdForalder=" & parentid
obsRs.Sort = "ObjektNamn"
if obsRs.RecordCount > 0 then
if not obsRs.eof then
Do until obsRs.eof
Response.Write "<option value=""" & obsRs.fields("ObjektId") & """>" & WriteString(level," ") & obsRs.fields("ObjektNamn") & "</option>"
Recur obsRs.fields("ObjektId"), level + 1
if not obsRs.eof then
obsRs.movenext
end if
Loop
end if
end if
End sub
Call Recur("NULL",0)
Detta funkade.. :e
Plockade bort alla referenser till objekt.
264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2