global.asa文件的一个奇怪问题:找不到元素
错误描述:
===============================================================================
错误类型:
(0x8002802B)
找不到元素。
/dahuzi/global.asa, 第 6 行
浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
网页:
GET /dahuzi/login/login.asp
时间:
2005年8月2日, 10:35:33
详细信息:
Microsoft 支持
===============================================================================
代码(前13行)
===============================================================================
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_onStart
dim conn
set conn=server.createobject("adodb.connection")
exec="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "login/logini.asp'"
conn.open exec
conn.begintrans
conn.execute "delete * from [count]"
conn.execute "insert into [count]([total],[current]) values(0,0)"
conn.committrans
set conn = nothing
End Sub
===============================================================================
比较有意思的是:第一次启动localhost上的这个网站,就出现这个错误,我点击一下刷新按钮,就正常显示登陆页面了。
请高手们告诉如何解决这个问题。
问题点数:20、回复次数:8Top
1 楼lxcooi(流星の梦)回复于 2005-08-02 10:54:15 得分 10
据我所知
Application_onStart
过程中不能使用
Request,Response,Session对象
要处理的话请到
Session_onStartTop
2 楼xiaobird1(Vincent)回复于 2005-08-02 11:10:44 得分 5
没错,楼上正解
使用的话,IIS也不会报正确代码行有错误,只会报找不到元素,我当初也研究半天才发现这个错误,就因为使用了一句Response.WriteTop
3 楼woshihuzi(我是胡子)回复于 2005-08-02 13:18:55 得分 0
我的本意是想找到数据库的正确位置,只要能找到这个位置,我就可以不用
Request.ServerVariables("APPL_PHYSICAL_PATH")
这个冬冬了。
不过,让我头疼的是,如果用server.mappath("db/syl.asp"),得不到正确的结果。因为激发Application_onStart 事件的网页位置可能不同,所以数据库的位置不能正确找到。我只好用
Request.ServerVariables("APPL_PHYSICAL_PATH")
来做了。
哪位高手能帮我找到正确的数据库位置呢?
Top
4 楼lxcooi(流星の梦)回复于 2005-08-02 14:17:10 得分 5
楼主的意思大概明白,在不改变楼主数据记录方式条件下,以下二种方法可以一试。
一、用server.mappath(".")来得到激发路径,然后再找数据库就行了。
二、设置一个Application变量,作个标志。然后在Session_onStart中执行代码。Top
5 楼woshihuzi(我是胡子)回复于 2005-08-02 15:03:24 得分 0
我用数据的一个表记录登陆的总人数历史统计和在线登录人数统计。我所需要的功能是在
Application_onStart
事件中把这两个人数统计字段清零。
如果有更好的办法实现这个功能,我就不用在global.asa文件中使用
Request.ServerVariables("APPL_PHYSICAL_PATH")
之类的东东了。Top
6 楼lxcooi(流星の梦)回复于 2005-08-02 16:48:37 得分 0
我不明楼主的数据库中记录的是什么,,如果只是记录在开机期间的数据(即重启清空)用Application变量就行了,为什么还要用数据库??Top
7 楼woshihuzi(我是胡子)回复于 2005-08-02 17:29:27 得分 0
使用数据库的目的是保存总的访问量。
当机器重启之后,我要让总访问量等于关机之前的数据库记录的值,只当前在线用户清零。这似乎只能在Application_onStart
事件中才能做到吧。Top
8 楼woshihuzi(我是胡子)回复于 2005-08-03 10:18:46 得分 0
谢谢各位,问题圆满解决,global.asa文件代码如下:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_onStart
Application.Lock
Application("DahuziTotalCounter") = 0
Application("DahuziCurrentCounter") = 0
Application.UnLock
End Sub
Sub Session_onStart
' 规定会话5分钟超时
session.timeout=5
dim conn,connstr,rs,exec,theDbTotal
' 创建conn对象和rs对象
set conn=server.createobject("adodb.connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "/login/logini.asp"
conn.open connstr
exec="select * from [count]"
set rs=server.createobject("adodb.recordset")
'取出表里面存的网站访问总量
rs.open exec,conn,1,1
theDbTotal=CLng(trim(rs("total")))
'如果Application("DahuziTotalCounter")等于0,说明服务器可能重新启动过
'网站的访问总人数应该以数据库为准
if Application("DahuziTotalCounter")>0 then
theDbTotal=Application("DahuziTotalCounter")
end if
'更新Application("DahuziTotalCounter")和Application("DahuziCurrentCounter")
Application.Lock
Application("DahuziTotalCounter")=theDbTotal+1
Application("DahuziCurrentCounter")=Application("DahuziCurrentCounter")+1
Application.UnLock
'根据修改后的Application变量值更新数据库
conn.begintrans
conn.execute "delete * from [count]"
conn.execute "insert into [count]([total],[current]) values(" & CStr(Application("DahuziTotalCounter")) & "," & cstr(Application("DahuziCurrentCounter")) &")"
conn.committrans
set conn = nothing
End Sub
Sub Session_onEnd
Session("UserName") = ""
Session("UserID") = ""
Session("UserType") = ""
'更新Application("DahuziCurrentCounter")
Application.Lock
Application("DahuziCurrentCounter")=Application("DahuziCurrentCounter")-1
if Application("DahuziCurrentCounter")<0 then
Application("DahuziCurrentCounter")=0
end if
Application.UnLock
'更新数据库
dim visitors,conn,rs,exec
set conn=server.createobject("adodb.connection")
exec="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "/login/logini.asp"
conn.open exec
conn.begintrans
conn.execute "Update [count] set [current]=" & cstr(Application("DahuziCurrentCounter"))
conn.committrans
set conn = nothing
End Sub
</SCRIPT>
Top




