Ciao Santino
Io ho avuto lo stesso "problema" qualche tempo fà , ovvero anche io avevo l'esigenza di creare 1 menu "infinito" ...con quello che so io di ASP sono arrivato a sviluppare 1 menu dove per ogno sottovoce apro la tabella (che è strutturata come la tua), per non avere tutti i cicli annidati qualcuno mi aveva detto di usare gli array...ma non ci sono riuscito...

per cui, ti passo quello che ho fatto io (anche se ho capito e visto che tu hai + esperinza di me in ASP)...
<%
Dim IDMenu1
set Menu = Server.CreateObject("ADODB.Recordset")
sql = "select * from Menu where IDPadre =" & 0
Menu.ActiveConnection = cn
Menu.Open sql, cn
%>

<div id="menu">

<h2>titolo menu</h2>

<%
Do while not Menu.EOF
IDMenu1 = Menu("IDMenu")
%>
<ul>[*]" class="x"><%=Menu("voce")%>

<%
Dim IDMenu2
set Menu2 = Server.CreateObject("ADODB.Recordset")
sql = "select * from Menu where IDPadre =" & IDMenu1
Menu2.ActiveConnection = cn
Menu2.Open sql, cn
%>
<%if not Menu2.EOF then %>
<ul>
<%
Do while not Menu2.EOF
IDMenu2 = Menu2("IDMenu")
%>[*]" class="x"><%=Menu2("voce")%>



<%
Dim IDMenu3
set Menu3 = Server.CreateObject("ADODB.Recordset")
sql = "select * from Menu where IDPadre =" & IDMenu2
Menu3.ActiveConnection = cn
Menu3.Open sql, cn
%>
<%if not Menu3.EOF then %>
<ul>
<%do while not Menu3.EOF%>[*]" class="x"><%=Menu3("voce")%>
<%
Menu3.movenext
loop
%>[/list]
<%end if%>

<%
Menu2.movenext
loop
%>[/list]
<%end if%>

[/list]
<%
menu.movenext
loop
menu3.close()
Set menu3 = nothing
menu2.close()
Set menu2 = nothing
menu.close()
Set menu = nothing
%>

</div>
<%
Pagina.close()
Set Pagina = nothing
%>

--------------------------------------------

questo il foglio di stile

#menu{
background:#000000;
padding:1px;
z-index:2;
width:170px;
}

#menu a, #menu h2{
display:block;
font:bold 11px/16px verdana;
border-top:1px solid #ccc;
border-left:1px solid #bbb;
border-right:1px solid #888;
border-bottom:1px solid #555;
white-space:nowrap;
text-indent:2px;
width:170px;
}

#menu a{
background:#000000;
text-decoration:none;
}

#menu a, #menu a:visited{
color:#494c59;
}

#menu a:hover{
color:#000;
background:#fff;
}

#menu a:active{
color:#060;
background:#e2e2ec;
}

#menu h2{;
color:#fff;
background:#369;
text-transform:uppercase;
margin:0;
padding:0;
width:170px;
}

#menu li{
list-style-type:none;
}

#menu ul li{
position:relative;
font:bold 10px/16px verdana;
}

#menu li ul{
position:absolute;
top:0;
left:170px;
display:none;
}

/* Fix IE. Hide from IE Mac \*/
* html #menu ul li{float:left;height:1%;}
* html #menu ul li a{height:1%;}
/* End */

div#menu ul, #menu ul ul, div#menu ul ul ul{
margin:0;
padding:0;
list-style-image:none;
width:170px;
}

div#menu ul ul, div#menu ul ul ul, div#menu ul li:hover ul ul, div#menu ul li:hover ul ul ul{
display:none;
}

div#menu ul li:hover ul, div#menu ul ul li:hover ul, div#menu ul ul ul li:hover ul{
display:block;
}

/* Styling for Expand */

#menu a.x, #menu a.x:visited{
font-weight:bold;
text-indent:2px;
color:#494c59;
background:#edeef6;
}

#menu a.x:hover{
color:#fff;
background:#000000;
}

#menu a.x:active{
color:#060;
background:#e2e2ec;
}


-------------------------------------------------------

se riesci a scrivere meno codice fammelo sapere..