从年初开始准备考研,已经很久没有更新自己的博客了。假期帮学校搞服务器,遇到了一个有趣的问题,记录一下吧。
在服务器数据迁移完毕,环境搭建好,正式运行后,学校官网首页出现了这个问题
打开文件,找到问题行:
<%
sql="select top 10 d_id,d_title,class_id,d_time,is_url,url from a_detail where class_id = 12 or class_id = 18 or class_id = 19 order by d_id desc"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof and not rs.bof then
Do While Not rs.eof
dim class_id,d_id,d_time,d_year,d_month,d_day
class_id = rs("class_id")
d_id = rs("d_id")
d_time_text = CStr(rs("d_time"))
d_time_arr = Split(d_time_text,"-")
d_year = d_time_arr(0)
if d_time_arr(1) <= 9 then // 问题行
d_month = "0"&d_time_arr(1)
else
d_month = d_time_arr(1)
end if
if d_time_arr(2) <= 9 then
d_day = "0"&d_time_arr(2)
else
d_day = d_time_arr(2)
end if
if rs("is_url") = true then
Response.Write("<tr><td><img src='pic/row.png' align='absmiddle'><font class='NewsTitledy'>"&d_month&"-"&d_day&"</font> | <a class='NewsTitledy' href='"&rs("url")&"' target='_blank'>"&rs("d_title")&"</a><td></tr>")
else
Response.Write("<tr><td><img src='pic/row.png' align='absmiddle'><font class='NewsTitledy'>"&d_month&"-"&d_day&"</font> | <a class='NewsTitledy' href='page/page/"&class_id&"/"&d_year&"-"&d_month&"-"&d_day&"-"&d_id&".html' target='_blank'>"&rs("d_title")&"</a><td></tr>")
end if
rs.movenext
Loop
end if
rs.close
%>
这段代码的功能不难理解,就是从top表中取出相应的字段,然后调用各个字段的值,在组合列出链接目录。 从代码看,没有任何问题,文件是从原服务器上直接拷贝下来的,在原来的环境下,没有任何问题,那么现在问题出现在哪里了呢?
根据提示,发现是数组下标越界了,尝试将d_time_arr(1) <= 9 改成 d_time_arr(0) <= 9 :
再结合一下代码,瞬间明白了!!!
看这一行
d_time_arr = Split(d_time_text,"-")
我们知道split() 方法用于把一个字符串分割成字符串数组,在这里的分割依据是“-”符号,但是服务器的时间格是“yyyy/M/d”!
知道问题就容易解决了。 方法有两种,第一种就是将服务器的时间格式改为yyyy-M-D,步骤如下:
** 运行 --> 输入 regedit
** 找到 HKEY_USERS.DEFAULTControl PanelInternational
** 找到右侧的 sDate和sShortDate,将其中的“/” 改为“-”
** 重启IIS
第二种简单点,直接修改代码,将d_time_arr = Split(d_time_text,"-")改成d_time_arr = Split(d_time_text,"/") 以上,成功解决了“Microsoft VBScript 运行时错误 '800a0009' 下标越界: '[number: 1]' ”的问题。