ASP+ACCESS 在数据量达100万条记录下,载入速度仍然惊人....
// 网上转载. 忘了作者... : )
//********************** index.asp ************************//
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Option Explicit%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>tree</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<script language="JavaScript">
<!--
var d1,d2;
function expand(id)
{
var d=new Date();
d1=d.valueOf();
var s_id = eval("s" + id);
var dir_id = eval("dir" + id);
if(s_id.href != @#@#)
{
//window.open(s_id.href);
//or
//top.frames[@#FrameName@#].location.href = s_id.href;
}
switch(dir_id.open)
{
//改变"+","-"
case "true":
{
with(dir_id)
{
innerText = "+";
open = "false";
className = @#dirclose@#;
}
if(document.getElementById("t" + id))
{
eval("t"+id).style.display = @#none@#;
document.getElementById("load_" + id).style.display = @#none@#;
return;
}
else
{
document.getElementById("load_" + id).style.display = @#none@#;
}
break;
}
case "false":
{
with(dir_id)
{
innerText = "-";
open = "true";
className = @#diropen@#;
}
document.getElementById("load_" + id).style.display = @#@#;
if(document.getElementById("t" + id))
{
eval("t" + id).style.display = @#@#;
eval("load_" + id).style.display = @#none@#;
return;
}
else
{
document.frames[@#hifm@#].location.replace("subtree.asp?id=" + id);
}
break;
}
default:dir_id.innerText = "."; dir_id.className = @#dirNode@#; return;
}
}
function ArrToHtml(ArrNode,nodeid)
{
//输出到页面
var node_html = @#<table id="t@# + nodeid + @#" width="100%" border="0" style="position: relative; left: 18px;" cellspacing="0" cellpadding="0">@#;
var str,opened,cls
for (var i = 0; i < ArrNode.length; i++)
{
if (ArrNode[i].iChildren == 0)
{
str = @#.@#;
opened = @#no@#;
cls = @#dirNode@#;
}
else
{
str = @#+@#;
opened = @#false@#;
cls = @#dirclose@#;
}
node_html += @#<tr><td id="node@# + ArrNode[i].id + @#" class="td_node" valign="top"><span class="@# + cls + @#" id="dir@# + ArrNode[i].id + @#" onclick="expand(@# + ArrNode[i].id + @#)" open="@# + opened + @#">@# + str + @#</span><span class="node" id="s@# + ArrNode[i].id + @#" onclick="expand(@# + ArrNode[i].id + @#)" title="@# + ArrNode[i].Content + @#" href="@# + ArrNode[i].strLink + @#">@# + ArrNode[i].Content + @#</span></td></tr>@#;
if (ArrNode[i].iChildren > 0)
{
node_html += @#<tr id="load_@# + ArrNode[i].id + @#" style="display: none"><td class="td_node"><table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18; top: 0px"><tr><td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span></td></tr></table></td></tr>@#;
}
}
node_html += @#</table>@#;
if (document.getElementById("load_" + nodeid))
{
document.getElementById("load_" + nodeid).style.display = "none";
document.getElementById("node" + nodeid).innerHTML += node_html;
var d=new Date();
d2=d.valueOf();
message.innerHTML = "耗时:"+(d2-d1)+"ms";
}
}
-->
</script>
</head>
<body topmargin="0" leftmargin="0" scroll="yes">
<%
Dim conn,rs
Dim s,open,cls
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=0 order by parentid",conn,1,3
%>
<div id="message" style="height: 20px" align="center"> </div>
<div align="center">
<center>
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%" bgcolor="#F2F2F2">
<tr>
<td width="260" valign="top" align="left">
<div id="treedir" style="overflow: auto; width: 30%; height: 100%;">
<table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18px; top: 20px;" width="100%">
<%
Do While Not rs.EOF
If rs("children") = 0 Then
s = "."
open = "no"
cls = "dirNode"
Else
s = "+"
open = "false"
cls = "dirclose"
End If
%>
<tr>
<td id="node<% = rs("id")%>" class="td_node" valign="top"><span class="<% = cls %>" id="dir<% = rs("id") %>" onclick="expand(<%=rs("id")%>)" open="<% = open %>"><% = s %></span><span class="node" id="s<% = rs("id") %>" onclick="expand(<% = rs("id") %>)" title="<% = Trim(rs("content")) %>" href="<% = Trim(rs("link")) %>"><% = rs("content") %></span>
</td>
</tr>
<% If rs("children") > 0 Then%>
<tr id="load_<% = rs("id") %>" style="display: none">
<td class="td_node">
<table border="0" cellspacing="0" cellpadding="0" style="position:relative;left:18;top:0" width="100%">
<tr>
<td class="td_node"><span class="dirNode">.</span><span class="load">Loading...</span>
</td>
</tr>
</table>
</td>
</tr>
<%End If%>
<%
rs.MoveNext
Loop
%>
</table>
</div>
</td>
</table>
</center>
</div>
<%
Set rs = Nothing
Set conn = Nothing
%>
<iframe id=@#hifm@# width=0 height=0 style="display: none" height="100%" width="100%"></iframe>
</body>
</html>
///****************** subtree.asp *********************//
<%Option Explicit%>
<script language="JavaScript">
function NodeClass(id,Content,strLink,iChildren)
{
//this.id=parseInt(id);
this.id=id;
this.Content=Content;
this.strLink=strLink;
this.iChildren=iChildren;
//this.iChildren=parseInt(iChildren);
}
var ArrNode = new Array();
<%
Dim conn,rs,s,cls,href,Open
Dim nodeid,i
nodeid = Request.QueryString("id")
@#On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree/tree.mdb") & ";Persist Security Info=False"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=" & nodeid & "",conn,1,3
i=0
Do While Not rs.EOF
%>
ArrNode[<%=i%>] = new NodeClass(<%=rs("id")%>,@#<%=trim(rs("content"))%>@#,@#<%=trim(rs("link"))%>@#,<%=rs("children")%>);
<%
i=i+1
rs.MoveNext
Loop
Set rs = Nothing
%>
parent.ArrToHtml(ArrNode,@#<% = nodeid %>@#);
-->
</script>
<%
Set conn = Nothing
%>
//********************* node.htc *********************//
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="fos()"/>
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="blu()"/>
<PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="st()"/>
<SCRIPT>
function fos(){
if(style.backgroundColor!=@##ffffff@#){
style.color="#000000"
style.border="1 solid #888888"
style.backgroundColor=@##DDDDDD@#
}
else
{style.color="#000000"
style.border="1 solid #999999"
style.backgroundColor=@##ffffff@#
}
}
function blu(){
if(style.backgroundColor!=@##ffffff@#){
style.color="#000000"
style.border="1 solid #f2f2f2"
style.backgroundColor=@##f2f2f2@#
}
else
{style.color="#000000"
style.border="1 solid #999999"
style.backgroundColor=@##ffffff@#
}
}
function st(){
return false;
}
</SCRIPT>
</PUBLIC:COMPONENT>
//*************************** style.css ****************//
body{font-size:12px}
#txt{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366clearcase/" target="_blank" >cc}
#hrf{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366cc}
#sb{font-size: 12px; color: #000000; font-family: Courier New;background-color:#d2e8ff;border:1 solid #3366cc;cursor:hand}
.node{position:relative;left:2;height:20;padding:3 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #f2f2f2;behavior:url(css/node.htc)}
.load{position:relative;left:2;height:20;padding:1 3 1 3;font-size:12px;font-family: Courier New;cursor:hand;border:1 solid #999999;background-color:#f2f2f2;color:#999999}
.td_node{height:22px}
#treedir{
}
span.diropen
{ padding-left:2px;
overflow:hidden;
line-height:3px;
font-size:12px;
padding-top:5px;
width:11px;
height:11px;
border:solid 1px black;
background-color:#ffffff;
cursor:hand;
}
span.dirclose
{
line-height:6px;
font-size:9px;
overflow:hidden;
padding:2px;
width:11px;
height:11px;
border:solid 1px black;
background-color:#ffffff;
cursor:hand;
}
.dirNode
{
font-weight:bold
overflow:visible;
font-size:9px;
line-height:3px;
padding: 1px 1px 0px 3px;
width:11px;
height:11px;
border:solid 1px black;
background-color:#ffffff;
cursor:hand;
}
// 把 node.htc, style.css 保存与 css 目录下. index.asp subtree.asp 放与根目录.
另新建一ACCESS数据库 tree.mdb
表deeptree 结构为 id,content, parentid,link