ASP+ACCESS 在数据量达100万条记录下,载入速度仍然惊人....
// 网上转载. 忘了作者... : )
//********************** Index.asp ************************//
1
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>2
<%Option Explicit%>3
<html>4
<head>5
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">6
<title>tree</title>7
<link href="css/style.css" rel="stylesheet" type="text/css">8
<script language="JavaScript">9
<!--10
var d1,d2;11
12
function expand(id)13
{14
var d=new Date();15
d1=d.valueOf();16
17
var s_id = eval("s" + id);18
var dir_id = eval("dir" + id);19
if(s_id.href != '')20
{21
//window.open(s_id.href);22
//or23
//top.frames['FrameName'].location.href = s_id.href;24
}25
26
switch(dir_id.open)27
{28
//改变"+","-"29
case "true":30
{31
with(dir_id)32
{33
innerText = "+";34
open = "false";35
className = 'dirclose';36
}37
if(document.getElementById("t" + id))38
{39
eval("t"+id).style.display = 'none';40
document.getElementById("load_" + id).style.display = 'none';41
return;42
}43
else44
{45
document.getElementById("load_" + id).style.display = 'none';46
}47
break;48
}49
case "false":50
{51
with(dir_id)52
{53
innerText = "-";54
open = "true";55
className = 'diropen';56
}57
58
document.getElementById("load_" + id).style.display = '';59
60
if(document.getElementById("t" + id))61
{62
eval("t" + id).style.display = '';63
eval("load_" + id).style.display = 'none';64
return;65
}66
else67
{68
document.frames['hifm'].location.replace("subtree.asp?id=" + id);69
}70
break;71
}72
default:dir_id.innerText = "."; dir_id.className = 'dirNode'; return;73
}74
75
}76
77
function ArrToHtml(ArrNode,nodeid)78
{79
//输出到页面80
var node_html = '<table id="t' + nodeid + '" width="100%" border="0" style="position: relative; left: 18px;" cellspacing="0" cellpadding="0">';81
82
var str,opened,cls83
for (var i = 0; i < ArrNode.length; i++)84
{85
if (ArrNode[i].iChildren == 0)86
{87
str = '.';88
opened = 'no';89
cls = 'dirNode';90
}91
else92
{93
str = '+';94
opened = 'false';95
cls = 'dirclose';96
}97
98
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>';99
100
if (ArrNode[i].iChildren > 0)101
{102
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>';103
}104
}105
106
node_html += '</table>';107
if (document.getElementById("load_" + nodeid))108
{109
document.getElementById("load_" + nodeid).style.display = "none";110
document.getElementById("node" + nodeid).innerHTML += node_html;111
var d=new Date();112
d2=d.valueOf();113
message.innerHTML = "耗时:"+(d2-d1)+"ms";114
}115
}116
-->117
</script>118
</head>119
120
<body topmargin="0" leftmargin="0" scroll="yes">121
<%122
Dim conn,rs123
Dim s,open,cls124
On Error Resume Next125
Set conn = Server.CreateObject("ADODB.Connection")126
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("Tree.mdb") & ";Persist Security Info=False"127
Set rs = Server.CreateObject("ADODB.Recordset")128
129
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=0 order by parentid",conn,1,3130
%>131
<div id="message" style="height: 20px" align="center"> </div>132
<div align="center">133
<center>134
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%" bgcolor="#F2F2F2">135
<tr>136
<td width="260" valign="top" align="left">137
<div id="treedir" style="overflow: auto; width: 30%; height: 100%;">138
<table border="0" cellspacing="0" cellpadding="0" style="position: relative; left: 18px; top: 20px;" width="100%">139
<%140
Do While Not rs.EOF141
If rs("children") = 0 Then142
s = "."143
open = "no"144
cls = "dirNode"145
Else146
s = "+"147
open = "false"148
cls = "dirclose"149
End If150
%>151
<tr>152
<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>153
</td>154
</tr>155
<% If rs("children") > 0 Then%>156
<tr id="load_<% = rs("id") %>" style="display: none">157
<td class="td_node">158
<table border="0" cellspacing="0" cellpadding="0" style="position:relative;left:18;top:0" width="100%">159
<tr>160
<td class="td_node"><span class="dirNode">.</span><span class="load">Loading</span>161
</td>162
</tr>163
</table>164
</td>165
</tr>166
<%End If%>167
<%168
rs.MoveNext169
Loop170
%>171
</table>172
</div>173
</td>174
</table>175
</center>176
</div>177
<%178
Set rs = Nothing179
Set conn = Nothing180
%>181
<iframe id='hifm' width=0 height=0 style="display: none" height="100%" width="100%"></iframe>182
</body>183
</html>///****************** SubTree.asp *********************//
1
<%Option Explicit%>2
<script language="JavaScript">3
function NodeClass(id,Content,strLink,iChildren)4
{5
//this.id=parseInt(id);6
this.id=id;7
this.Content=Content;8
this.strLink=strLink;9
this.iChildren=iChildren;10
//this.iChildren=parseInt(iChildren);11
}12
13
var ArrNode = new Array();14
<%15
Dim conn,rs,s,cls,href,Open16
Dim nodeid,i17
nodeid = Request.QueryString("id")18
'On Error Resume Next19
Set conn = Server.CreateObject("ADODB.Connection")20
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree.mdb") & ";Persist Security Info=False"21
Set rs = Server.CreateObject("ADODB.Recordset")22
rs.Open "select *,(select count(*) from deeptree where parentid = T.id) as children from deeptree T where parentid=" & nodeid & "",conn,1,323
i=024
Do While Not rs.EOF25
%>26
ArrNode[<%=i%>] = new NodeClass(<%=rs("id")%>,'<%=trim(rs("content"))%>','<%=trim(rs("link"))%>',<%=rs("children")%>);27
<%28
29
i=i+130
rs.MoveNext31
Loop32
33
Set rs = Nothing34
%>35
parent.ArrToHtml(ArrNode,'<% = nodeid %>');36
-->37
</script>38
<%39
Set conn = Nothing40
%>//********************* Node.htc *********************//
1
<PUBLIC:COMPONENT>2
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="fos()"/>3
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="blu()"/>4
<PUBLIC:ATTACH EVENT="onselectstart" ONEVENT="st()"/>5
<SCRIPT>6
function fos(){}{7
if(style.backgroundColor!='#ffffff'){8
style.color="#000000"9
style.border="1 solid #888888"10
style.backgroundColor='#DDDDDD'11
}12
else13
{}{style.color="#000000"14
style.border="1 solid #999999"15
style.backgroundColor='#ffffff'16
}17
}18
19
function blu(){}{20
if(style.backgroundColor!='#ffffff'){21
style.color="#000000"22
style.border="1 solid #f2f2f2"23
style.backgroundColor='#f2f2f2'24
}25
else26
{}{style.color="#000000"27
style.border="1 solid #999999"28
style.backgroundColor='#ffffff'29
}30
}31
32
function st(){}{33
return false;34
}35
</SCRIPT>36
</PUBLIC:COMPONENT>//*************************** Style.css ****************//
1
body{}{font-size:12px}2
#txt{}{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366cc}3
#hrf{}{font-size: 12px; color: #000000; font-family: Courier New;border:1 solid #3366cc}4
#sb{}{font-size: 12px; color: #000000; font-family: Courier New;background-color:#d2e8ff;border:1 solid #3366cc;cursor:hand}5
.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)}6
.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}7
.td_node{}{height:22px}8
#treedir{}{9
}10
span.diropen11
{}{ padding-left:2px;12
overflow:hidden;13
line-height:3px;14
font-size:12px;15
padding-top:5px;16
width:11px;17
height:11px;18
border:solid 1px black;19
background-color:#ffffff;20
cursor:hand;21
}22
span.dirclose23
{}{24
line-height:6px;25
font-size:9px;26
overflow:hidden;27
padding:2px;28
width:11px;29
height:11px;30
border:solid 1px black;31
background-color:#ffffff;32
cursor:hand;33
}34
.dirNode35
{}{36
font-weight:bold37
overflow:visible;38
font-size:9px;39
line-height:3px;40
padding: 1px 1px 0px 3px;41
width:11px;42
height:11px;43
border:solid 1px black;44
background-color:#ffffff;45
cursor:hand;46
}// 把 Node.htc, Style.css 保存在 CSS 目录下. Index.asp,SubTree.asp 放与根目录.
另新建一ACCESS数据库 Tree.mdb
表DeepTree 结构为 ID(自动编号),Content(文本), ParentID(数字),Link(文本)