若使用ASP抓取資料庫資料要做像樹狀結構的選單,
相信大家一定卡住很久…
當然Asp現在使用的人愈來愈少,
不過相信以前很多人都卡關過在這裡,
這邊提供一個比較偷吃步的方式給各位!
<請先自行將Access資料庫與連線自串設定好>
範例使用資料庫如下二圖:
資料庫說明:
classOne資料表為第一層
classTwo資料表為第二層
classOne.ClassNum欄位為第一層順序
classTwo.Num欄位為第二層順序
1.index.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="Connections/ConnTest.asp" -->
<!--以下部份為使用繫結產生-->
<%
Dim Recclassone
Dim Recclassone_cmd
Dim Recclassone_numRows
Set Recclassone_cmd = Server.CreateObject ("ADODB.Command")
Recclassone_cmd.ActiveConnection = MM_ConnTest_STRING
Recclassone_cmd.CommandText = "SELECT * FROM classOne ORDER BY ClassNum DESC"
Recclassone_cmd.Prepared = true
Set Recclassone = Recclassone_cmd.Execute
Recclassone_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index
Repeat1__numRows = -1
Repeat1__index = 0
Recclassone_numRows = Recclassone_numRows + Repeat1__numRows
%>
<!--以上部份為使用繫結產生-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>
<body>
<table border="0" cellspacing="1">
<!--重覆區域-->
<%
While ((Repeat1__numRows <> 0) AND (NOT Recclassone.EOF))
%>
<tr>
<td><%=(Recclassone.Fields.Item("ClassTitle").Value)%></td>
<!--載入a.asp頁面-->
<td><!--#include file="a.asp" --></td>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Recclassone.MoveNext()
Wend
%>
<!--重覆區域結束-->
</table>
</body>
</html>
<%
Recclassone.Close()
Set Recclassone = Nothing
%>
2.a.asp
<!--使用繫結產生語法,篩選器請選擇"應用程式變數"-->
<%
Dim RecClassTwo__MMColParam
RecClassTwo__MMColParam = (Recclassone.Fields.Item("ClassID").Value) '將這邊原本的"1"數字更改成index.asp撈回資料庫的ID做判別的索引
If (Application("classOneID") <> "") Then
RecClassTwo__MMColParam = Application("classOneID")
End If
%>
<%
Dim RecClassTwo
Dim RecClassTwo_cmd
Dim RecClassTwo_numRows
Set RecClassTwo_cmd = Server.CreateObject ("ADODB.Command")
RecClassTwo_cmd.ActiveConnection = MM_ConnTest_STRING
RecClassTwo_cmd.CommandText = "SELECT * FROM classTwo WHERE classOneID = ? ORDER BY Num ASC"
RecClassTwo_cmd.Prepared = true
RecClassTwo_cmd.Parameters.Append RecClassTwo_cmd.CreateParameter("param1", 5, 1, -1, RecClassTwo__MMColParam) ' adDouble
Set RecClassTwo = RecClassTwo_cmd.Execute
RecClassTwo_numRows = 0
%>
<!--使用尋找與取代,將重覆的"Repeat1"全部改成"Repeat2",避免載入至index.asp的時候產生衝突-->
<%
Dim Repeat2__numRows
Dim Repeat2__index
Repeat2__numRows = -1
Repeat2__index = 0
RecClassTwo_numRows = RecClassTwo_numRows + Repeat2__numRows
%>
<%
While ((Repeat2__numRows <> 0) AND (NOT RecClassTwo.EOF))
%>
<!--第二層標題-->
<%=(RecClassTwo.Fields.Item("Title").Value)%>
<%
Repeat2__index=Repeat2__index+1
Repeat2__numRows=Repeat2__numRows-1
RecClassTwo.MoveNext()
Wend
%>
<%
RecClassTwo.Close()
Set RecClassTwo = Nothing
%>