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
//or
23
//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
else
44
{
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
else
67
{
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,cls
83
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
else
92
{
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,rs
123
Dim s,open,cls
124
On Error Resume Next
125
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,3
130
%>
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; 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.EOF
141
If rs("children") = 0 Then
142
s = "."
143
open = "no"
144
cls = "dirNode"
145
Else
146
s = "+"
147
open = "false"
148
cls = "dirclose"
149
End If
150
%>
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.MoveNext
169
Loop
170
%>
171
</table>
172
</div>
173
</td>
174
</table>
175
</center>
176
</div>
177
<%
178
Set rs = Nothing
179
Set conn = Nothing
180
%>
181
<iframe id='hifm' width=0 height=0 style="display: none" height="100%" width="100%"></iframe>
182
</body>
183
</html>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102


103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160


161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

///****************** 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,Open
16
Dim nodeid,i
17
nodeid = Request.QueryString("id")
18
'On Error Resume Next
19
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,3
23
i=0
24
Do While Not rs.EOF
25
%>
26
ArrNode[<%=i%>] = new NodeClass(<%=rs("id")%>,'<%=trim(rs("content"))%>','<%=trim(rs("link"))%>',<%=rs("children")%>);
27
<%
28
29
i=i+1
30
rs.MoveNext
31
Loop
32
33
Set rs = Nothing
34
%>
35
parent.ArrToHtml(ArrNode,'<% = nodeid %>');
36
-->
37
</script>
38
<%
39
Set conn = Nothing
40
%>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

//********************* 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
else
13
{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
else
26
{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>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

//*************************** 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.diropen
11
{ 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.dirclose
23
{
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
.dirNode
35
{
36
font-weight:bold
37
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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

// 把 Node.htc, Style.css 保存在 CSS 目录下. Index.asp,SubTree.asp 放与根目录.
另新建一ACCESS数据库 Tree.mdb
表DeepTree 结构为 ID(自动编号),Content(文本), ParentID(数字),Link(文本)