| set aa=new classlistaa.id="id"//编号的名称aa.classname="classname"//分类名称aa.pid="pid"//父ID名称aa.db_name="class"//表名list=aa.arrylist()?>
 类:classlist
  <%class classlistprivate c_idprivate c_db_nameprivate c_pidprivate c_classnamepublic property let id(str)c_id = strend propertypublic property let db_name(str)c_db_name = strend propertypublic property let pid(str)c_pid = strend propertypublic property let classname(str)c_classname = strend propertydim list()dim i,nPrivate Sub Class_Initialize()'初始化变量i=0n=0End Subpublic function classarry(thisid,pid)'取得下级IDif pid>0 thensql="select * from "&c_db_name&" where "&c_pid&"="&thisidelsesql="select * from "&c_db_name&" where "&c_id&"="&thisidend ifset rs_c=conn.execute(sql)n=n+1do while not rs_c.eoflist(0,i)=rs_c(c_id)'装入数组中list(1,i)=rs_c(c_classname)list(2,i)=n'n=n+1i=i+1thisid=classarry(rs_c(c_id),1)'这里递归调用,直到最后一个子类rs_c.movenextloopn=n-1rs_c.closeend functionpublic function arrylist()'循环出所有根类set rs_c=conn.execute("select count("&c_id&") from "&c_db_name)lenght=rs_c(0)rs_c.closeredim list(2,lenght)'设置数组set rs1=conn.execute("select "&c_id&" from "&c_db_name&" where "&c_pid&"=0")do while not rs1.eofcall classarry(rs1(c_id),0)'n=1rs1.movenextlooprs1.closearrylist=listend functionend class%>
 实例测试:
表class
字段
id:自动编号
classname:名称
pid:父ID
文件名:test.asp
  <%Set conn=Server.CreateObject("ADODB.connection")Set Rs = Server.CreateObject("ADODB.Recordset")StrDSN = "Driver={Microsoft Access Driver (*.mdb)}; DBQ="StrDSN = StrDSN & Server.MapPath("test.mdb")conn.Open strDSNfunction ins(num)str=""for ii=1 to numstr=str&"|-"nextins=strend functionset aa=new classlistaa.id="id"aa.classname="classname"aa.pid="pid"aa.db_name="class"list=aa.arrylist()response.write """| ID | 名称< td>第几类 |  for j=0 to ubound(list,2)response.write ""| "&list(0,j)&" | "&list(1,j)&" | "&list(2,j)&" | nextresponse.write "
'response.write list(1,3)%>
 循环结果:
bbs.it-home.org/code/class/test.asp
基本可以满足通常的需要啦。 |