近期的一些精华帖子,请大家分享!

大白菜芯 2003-12-06 01:21:57
发给你一个联动下拉框的ASP例子吧(感谢:meizz(梅花雪))
<%@ Language=VBScript codepage=936 %>
<% Option Explicit %>
<!-- 数据库结构 两个字段 provinceName(省名) cityName(城市名) -->
<!-- #include file="connection.asp" -->
<script language=javascript>
<%
dim RS
Set RS = Server.CreateObject("ADODB.Recordset")
RS.open "SELECT * FROM tableName ORDER BY provinceName DESC", Conn, 0, 1

dim provinceName '省名
dim provinceList '记录所有的省名, 最后输出到JS里组成省名数组
dim cityList '记录某个省的所有城市名, 最后输出到JS里组成城市名数组
dim cityIndex 'JS的city数组名与省名下拉框的索引对应
cityIndex = 1

do while not RS.eof
if isEmpty(provinceName) then
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
provinceName = Trim(RS("provinceName"))
else
if provinceName<>Trim(RS("provinceName")) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
if not isEmpty(cityList) then Response.write "var city"& cityIndex &_
" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
'输出每个省所对应的城市名的列表并组成JS的数组, 数组形式参考下面的实例
cityIndex = cityIndex + 1
cityList = ""
end if
provinceName = Trim(RS("provinceName"))
cityList = cityList & chr(34) & Trim(RS("cityName")) & chr(34) &","
'将每个省里的所有城市名组成一串字串
end if
RS.movenext
loop

if not isEmpty(cityList) then
Response.write "var city"& cityIndex &" = ["& Left(cityList, Len(cityList)-1) &"];"& VBCrLf
end if
if not isEmpty(provinceName) then
provinceList = provinceList & chr(34) & provinceName & chr(34) &","
Response.write "var provinceName = ["& Left(provinceList, Len(provinceList)-1) &"];"
'输出省名字串并组成省名的JS数组, 形式见下实例
end if

RS.close : Set RS=nothing
Conn.close : Set Conn=nothing
%>
</script>

<form name=form1>
<select name=province onchange="cityName(this.selectedIndex)">
<option value="">请选择省名</option>
</select>

<select name=city>
<option value="">请选择城名</option>
</select>
</form>

<script language=javascript>

/* 若要直接看下拉框联动效果的话, 将这段被注释的代码起用, 且上面的那段ASP注释即可
var provinceName = ["浙江", "江苏", "安徽", "江西"];
var city1 = ["杭州", "宁波", "温州", "绍兴", "金华", "湖州"];
var city2 = ["南京", "苏州", "无锡", "常州", "镇江", "徐州"];
var city3 = ["合肥", "翕县", "黄山", "祁门", "休宁"];
var city4 = ["南昌", "九江", "赣州", "上饶", "新余", "景德镇"];
//你在ASP输出的页面里应该看到如上这般的JS数组, 能看到则表示成功
*/


function province()
{

var e = document.form1.province;
for (var i=0; i<provinceName.length; i++)
e.options.add(new Option(provinceName[i], provinceName[i]));
}
function cityName(n)
{
var e = document.form1.city;
e.options.length = 1;
if (n == 0) return;
var a = eval("city"+ n); //得到城市的数组名
for (var i=0; i<a.length; i++) e.options.add(new Option(a[i], a[i]));
}
window.attachEvent("onload", province); //初始时给省名下拉框赋内容
</script>


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如何高效地访问记录集?
最近,随着数据库的日益庞大,本来两个差不多的数据库,我开始发现我的数据库查询起来越来越比我朋友网站的慢了,经过初步对照,问题好像出在访问记录集的方法上,这是真正的原因吗?

在遍历数据库时,事实表明,用索引数(index number)访问记录集元素要比用字段名称(field name)访问快出几倍,按字符串查询要比按整数查询花去更多的时间和系统资源。我想这是你的网站慢的主要原因吧。
因此,在遍历数据库时应注意下面两个问题:
1、尽量最少用select * 这样的语句。在遍历表里少量的字段时,select * 语句的执行效率是很低的,因为它在执行时,其实是执行了两次查询,在执行select语句前,首先必须查询系统表来确定名称和数据类型。
2、在使用记录集rs值前,应该把它赋值给本地变量,尤其是操作Text/Memo字段时。在“read mode”下调用本地变量比从记录集中重新调用rs值要快一些,特别是在多次recall recordset的场合,快的效果更明显。但要注意,如果在SQL语句或存储过程中改变了select列表的字段顺序,那么就要小心你的赋值。看看下面这个ASP例子:
<%
' 创建数据库连接.
set rs = conn.execute("exec sp_getRecords")
if not rs.eof then
do while not rs.eof

id = rs(0) ' 把rs值赋给本地变量
fname = rs(1)
lname = rs(2)
' ... 使用本地变量处理工作
rs.movenext
loop
end if
' ... 释放变量,结束连接.
%>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如何更快更好地调试ASP程序代码?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
<title>程序调试高手</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<%@ LANGUAGE="VBScript" %>
<%
Response.Buffer = True
' 打开页面缓冲
On Error Resume Next
' 打开错误处理
%>
<%
If Err.Number <> 0 Then
' 错误处理
Response.Clear
' 清除缓冲区
%>
</head>
<body>
<p><%= Err.Number %><br>
<%= Err.Line %><br>
</p>
</font><div align="center"><center>

<table border="0" cellspacing="0" width="600" height="166">
<tr>
<td height="61"><p align="center"> ASP调试错误信息显示</td>
</tr>
<tr>
<td height="106"><div align="center"><center><table border="1" cellspacing="0" width="400">
<tr>
<td colspan="2" width="400"><p align="center"><font
color="red">警告:本页面发生错误 </font></td>
</tr>
<tr>
<td width="96">错误号</td>
<td width="376"> </td>
</tr>
<tr>
<td width="96">错误描述<%=
Err.Description %></td>
<td width="376"> </td>
</tr>
<tr>
<td width="96">错误源<%= Err.Source
%></td>
<td width="376"> </td>
</tr>
<tr>
<td width="96">错误发生行
</td>
<td width="376"> </td>
</tr>
</table>
</center></div></td>
</tr>
</table>
</center></div>
</body>
</html>
<%
End If
%>

...全文
47 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
大白菜芯 2003-12-14
  • 打赏
  • 举报
回复
没有 人支持了吗
大白菜芯 2003-12-07
  • 打赏
  • 举报
回复
感谢啊!!
flying310 2003-12-07
  • 打赏
  • 举报
回复
收藏了.
liuyu202 2003-12-07
  • 打赏
  • 举报
回复
good!
thank you!
snowcloud2002 2003-12-07
  • 打赏
  • 举报
回复
好,顶
xharry 2003-12-07
  • 打赏
  • 举报
回复
;)
monkeys 2003-12-07
  • 打赏
  • 举报
回复
如何实现歌曲在线点播?


好了,下面我们看看如何在服务器上生成.m3u文件并下传到客户端的:
<%
dim choose,path,mydb,myset,SQL,fs,mp3
' 获得用户提交表单(list.htm)选中的曲目对应的id号,并将其赋给字串变量choose
choose=“("
for i=3 to request.form.count
choose=choose+request.form(i)+“,"
next
choose=left(choose,len(choose)-1)+“)"
if choose=“()" then
response.redirect(“list.htm")
response.end
' 判断choose变量,如果不包含id号,说明list.htm中没有选中任何歌曲,终止程序
end if
path=“E:\inetpub\wwwroot\temp\"
' 设置文件路径,把temp目录的权限设为对internet匿名用户具有read & write 权限
Set fs = CreateObject(“Scripting.FileSystemObject")
Set mp3 = fs.CreateTextFile(path+“listen.m3u", True)
' 创建文件对象
set mydb=server.createobject(“adodb.connection")
' 创建数据库对象
mydb.open “music"
SQL=“select mp3name,url from "&dbname&“where id in "&choose set myset=tdb.execute(SQL)
do while not myset.eof
' 检索数据库,获得曲目信息
mp3.Write(“http://"+myset(“url")+chr(10))
myset.movenext
' 生成点播曲目文件列表
loop
SQL=“update music set click=click+1,
this=this+1 where id in "&choose
mydb.execute(SQL)
' 更新数据库中的当天点播次数和总共点播次数
set myset=nothing
mydb.close
set mydb=nothing
mp3.close
set mp3=nothing
' 清空
response.redirect(“listen.m3u")
' 将该文件下传到用户
response.end
%>
monkeys 2003-12-07
  • 打赏
  • 举报
回复
如何限制重复订阅邮件或投票?

一、准备子程序和函数。
1、初始化数据,在Session对象中保存两个变量:
Sub InitializeFID()
' 每一个表单对应一个称为FID的唯一标识,为使该值唯一要用到一个计数器
If Not IsObject(Session("FIDList")) Then
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
' 每当一个表单成功提交,必须在一个Dictionary对象中存储它的FID
Session("FID")=0
End If
End Sub  
以后各个子程序都要调用它,但实际上每一个会话期间它只执行一次

2、生成表单的唯一标识符的函数GenerateFID() :
Function GenerateFID()
InitializeFID
Session("FID") = Session("FID") + 1
' 该函数首先将FID值加1,然后返回它
GenerateFID = Session("FID")
End Function
  
3、当表单成功地提交时,在Dictionary对象中登记它的唯一标识:
Sub RegisterFID()
Dim strFID
InitializeFID
strFID = Request("FID")
Session("FIDlist").Add strFID, now()
End Sub

4、在正式处理用户提交的表单之前,应用CheckFID()函数在Dictionary对象中检查它的FID是否已经登记,如已经登记,它返回FALSE,否则返回TRUE:
Function CheckFID()
Dim strFID
InitializeFID
strFID = Request("FID")
CheckFID = not Session("FIDlist").Exists(strFID)
End Function

二、将上面四个子程序放入包含文件forms.inc中,再根据FID值来决定生成表单还是处理表单结果,看看完整代码:
< %Option Explicit%>
< !--#include file="forms.inc"-->
< HTML>
< HEAD>
< TITLE>防止表单多次提交< /TITLE>
< /HEAD
< BODY>
< %
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%>
< /BODY>
< /HTML>

< %
Sub GenerateForm()
' GenerateForm负责生成表单,表单中应该含有一个隐藏的FID
%>
< form action="< %=Request.ServerVariables("PATH_INFO")%>"
method=GET>
< input type=hidden name=FID value="< %=GenerateFID()%>">
< input type=text name="param1" value="">
< input type=submit value="确定">
< /form>
< %
End Sub
%>

< %
Sub ProcessForm()
' ProcessForm负责处理通过表单提交的内容,但在处理之前应该先调用CheckFID()检查当前表单是否已经提交
If CheckFID() Then
Response.Write "您输入的内容是" & Request.QueryString("param1")
RegisterFID
Else
Response.Write "噢,您已经提交过一次了!"
End If
End Sub
%>
monkeys 2003-12-07
  • 打赏
  • 举报
回复
如何同时处理数据库和页面错误?
If Err.Number = 0 And objConnection.Errors.Count = 0 Then
Response.Clear
Response.Redirect ?lt;URL Here>?
End If

都准备好后,我们来看看程序代码:
<%
If Err.Number <> 0 Then
Response.Clear
Select Case Err.Number
Case 8
' 指定错误号,在这里处理自定义错误

Case Else
' 一般错误
If IsObject(objConnection) Then
If objConnection.Errors.Count > 0 Then
%>
<B>Database Connection Object</B>

<% For intLoop = 0 To objConnection.Errors.Count - 1%>

错误号: <%= objConnection.Errors(intLoop).Number %><BR>
错误描述: <%= objConnection.Errors(intLoop).Description %><BR>
错误源: <%= objConnection.Errors(intLoop).Source %><BR>
SQL状态: <%= objConnection.Errors(intLoop).SQLState %><BR>
本地错误: <%= objConnection.Errors(intLoop).NativeError %><P>
<%
Next
End If
End If
If Err.Number <> 0 Then
%>
<B>Page Error Object</B><BR>
错误号 <%= Err.Number %><BR>
错误描述 <%= Err.Description %><BR>
错误源<%= Err.Source %><BR>
错误行<%= Err.Line %><P>

<%
End If
End Select
End If
%>
fangpeng2003 2003-12-06
  • 打赏
  • 举报
回复
up
大白菜芯 2003-12-06
  • 打赏
  • 举报
回复
大家有好的,也来贴啊
boffinyu 2003-12-06
  • 打赏
  • 举报
回复
收藏!
folder 2003-12-06
  • 打赏
  • 举报
回复
ok thanks!
yangsm 2003-12-06
  • 打赏
  • 举报
回复
UP
大白菜芯 2003-12-06
  • 打赏
  • 举报
回复
thank you
超级大笨狼 2003-12-06
  • 打赏
  • 举报
回复
hao !!
yonghengdizhen 2003-12-06
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=2481135
大白菜芯 2003-12-06
  • 打赏
  • 举报
回复
如何计算出当前日期属于定义时间段内的第几星期?

Function CalculateWeekNo(BeginDate,EndDate,InputDate)
dim wdate(500,8)
z=0
x=0
strlong=len(CStr(inputdate))-9
inputdate=cdate(left(CStr(inputdate),strlong))
for i=cdate(BeginDate) to cdate(EndDate)
if inputdate=i then
x=z
Exit For
end if
if weekday(i)=7 then
z=z+1
end if
next

CalculateWeekNo=x
end Function
大白菜芯 2003-12-06
  • 打赏
  • 举报
回复
to yonghengdizhen(转瞬即逝) ( )
同意你的意见。
你有什么更好的方法吗。谢谢给我看看。好吗。
大白菜芯 2003-12-06
  • 打赏
  • 举报
回复
******************************************************
Write by wapweb
******************************************************
如何获知用户访问的具体时间?
见下列代码:
Dim M_DateTime
M_DateTime=Year(Date())&"/"&Right("0"&Month(Date()),2)&"/"Right("0"&Day(Date()),2)&"/"&Right("0"&Hour(Time()),2)&":"&Right("0"&Minute(Time()),2)&":"&Right("0"&Second(Time()),2)
哈。大家可以研究一下:
加载更多回复(7)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧