请教:烦请帮助诊断一下MID()函数

lidaixiang 2012-07-07 12:03:33
作了一个过程,用来遍历文档中的调用函数,代码如下:
Sub runsub(label)
' On Error Resume Next
Dim tmp1, tmp2, i
Dim tmpstr, para
tmp2 = 1
response.write "<br>G_p_show:" & G_P_Show & "此之前为G_P_show<br>"
response.write "InStr(tmp2,G_P_Show, label):" & InStr(tmp2,G_P_Show, label) & "<br>"
While InStr(tmp2,G_P_Show, label) > 0
tmp1 = InStr(tmp2, G_P_Show, label)
tmp2 = InStr(tmp1+1, G_P_Show, "$")
response.write "<br>Mid(G_P_Show,tmp1,tmp2-tmp1),G_P_Show=" & server.HTMLEncode(G_P_Show) & "<br>tmp1=" & cint(tmp1) & "<br>tmp2=" & cint(tmp2)
tmpstr = Mid( G_P_Show,tmp1,tmp2-tmp1)
tmpstr = Replace(tmpstr, "(", "")
tmpstr = Replace(tmpstr, ")", "")
tmpstr = Trim(Replace(tmpstr, label, ""))
para = Split(tmpstr, ",")
select Case label
Case "$NewsListtitle"
G_P_Show=Replace(G_P_Show,label&"("&tmpstr&")$",NewsListtitle(para(0),para(1),para(2),para(3)))
If Err Then
Response.Write "<br/>$NewsListtitle$标签有错误,请检查参数"
Response.Write Err.Description
Response.End()
End If
End select
tmp2 = 1
Wend
End Sub
上面的代码中,把G_p_show设为:G_p_show=“<P>test第一个模板作的专题.</P> <P>$NewsListtitle("行业新闻",3,5,15)$</P>”。运行测试中:
G_p_show:
test第一个模板作的专题.

$NewsListtitle("行业新闻",3,5,15)$

此之前为G_P_show
InStr(tmp2,G_P_Show, label):27

Mid(G_P_Show,tmp1,tmp2-tmp1),G_P_Show=<P>test第一个模板作的专题.</P> <P>$NewsListtitle("行业新闻",3,5,15)$</P>
tmp1=27
tmp2=56
Microsoft VBScript 运行时错误 错误 '800a000d'

类型不匹配: 'mid'

运行到MID函数时,就报错。请高手们帮助我诊断下,tmpstr = Mid( G_P_Show,tmp1,tmp2-tmp1)这句哪有错误。谢谢,在线等!
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidaixiang 2012-09-28
  • 打赏
  • 举报
回复
谢谢各位。根据代码一点一点追踪,终于发现了问题原因,是前面页面中自定义的一个变量与此函数重名了。这可以理解为冒犯了保留字,也可理解为自定义的函数优先于内部函数。改了自定义函数名就正常了。
lidaixiang 2012-07-07
  • 打赏
  • 举报
回复
感谢,刚试了,tmp2-tmp1输出正常,为数字。下面是输出结果:
InStr(tmp2,G_P_Show, label):27

Mid(G_P_Show,tmp1,tmp2-tmp1)中的G_P_Show:<P>test第一个模板作的专题.</P><P>$NewsListtitle("行业新闻",3,5,15)$</P>
tmp1:27
tmp2:56
tmp2-tmp1:29

问题会在哪儿呢,看不出有什么问题。
scscms太阳光 2012-07-07
  • 打赏
  • 举报
回复
mid(str,n,l)
n,l必须是数字。类型不匹配: 'mid'。说明n,l不是数字。原因应该是出现在tmp2-tmp1。要不你试着输出tmp2-tmp1看看是什么内容。
lidaixiang 2012-07-07
  • 打赏
  • 举报
回复
没有人吗
  • 打赏
  • 举报
回复
你还是从根据上找起,和打那个安全更新没关系

是你截取的参数tmp1 = InStr(tmp2, G_P_Show, label)
tmp2 = InStr(tmp1+1, G_P_Show, "$")
这里很可能出现null值,那么在mid中就出问题了
所以需要做判断才可以使用mid函数
就是判断
if isnumeric(tmp1) and isnumeric(tmp2) then
mid(str,tmp1,tmp2-tmp1)
end if
xifei0102 2012-07-07
  • 打赏
  • 举报
回复
这个问题我以前也遇到过
lidaixiang 2012-07-07
  • 打赏
  • 举报
回复
http://www.west263.com/www/info/59647-1.htm 这里说,出现类型不匹配问题,是在运行iis服务的windows 2003 server上安装了Internet Explorer 6 Service Pack 1 (KB832894)安全更新造成的。控制不了服务器。无语了。
lidaixiang 2012-07-07
  • 打赏
  • 举报
回复
快崩溃了,始终找不到原因。程序代码是从此前开发、目前正在运行的网站页面里拿过来的,在那个网站上就正常,这是否跟两个测试的这个网站的服务器的配置有关?

28,391

社区成员

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

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