asp程序使用的mssql数据库,从数据库读取字段后,使用自定义截取字符串方法是报错如下:
Microsoft VBScript 运行时错误 错误 '800a000d'
调用方法名称lleft:
owen1="新闻公告"
Set rs02=Server.CreateObject("ADODB.RecordSet")
sql="select top 7 news_id,news_Title,check_link,web_link,Creat_Date,hot from news_zx where (BigClassName='"&owen1&"' or BigClassName='询价采购') and (check_tj=1 and check_open=1) order by Creat_Date desc"
rs02.Open sql,conn,1,1
if rs02.eof and rs02.bof then
response.Write("暂时没有记录")
else
k=1
Do While Not rs02.Eof and k<7
response.Write("<p><span class='date'>"&rs02("Creat_Date")&"</span>")
response.write(lleft(rs02("news_Title")))
response.Write("</p>")
rs02.MoveNext
k=k+1
Loop
end if
rs02.close
set rs02=nothing
lleft方法如下:
function lleft(content,lef)
for le=1 to len(content)
if asc(mid(content,le,1))<0 then
lef=lef-2
else
lef=lef-1
end if
if lef<=0 then exit for
next
lleft=left(content,le)
end function
补充:
response.write(lleft(rs02("news_Title")))
rs02("news_Title")类型是string,使用TypeName(rs02("news_Title"))确定类型是string。
但是仍然报错Microsoft VBScript 运行时错误 错误 '800a000d',lleft类型不匹配
链接access数据库时,方法执行正常,切换到mssql2014时,爆类型不匹配、
数据类型转换问题。折腾几天终于完成了。
两个问题:
1、参数中指明类型
function lleft(content as String,lef as Integer)
....
end function
2、调用 的时候,你指定其中一个参数,没指定另一个参数lef(看你写的方法这是 要截取的长度吧)?
那调用 应该是:response.write(lleft(rs02("news_Title"),1)) 这样吧,,
function lleft(content as String,lef as Integer)
for le=1 to len(content)
if asc(mid(content,le,1))<0 then
lef=lef-2
else
lef=lef-1
end if
if lef<=0 then exit for
next
lleft=left(content,le)
end function
调用:
response.write(lleft(rs02("news_Title"),5))
或者
response.write(lleft(Cstr(rs02("news_Title")),5))
还是报错,如下:
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'lleft'
/index10.asp,行 631
@80后o(╯□╰)o囧囧: 你返回值写错了一个left(content,le) 这个应该是left(content,lef)
le 是循环参数,next后就失效了;
改为:
Function lleft(content As String, lef As Integer)
Dim str As String
For le = 1 To Len(content)
If Asc(Mid(content, le, 1)) < 0 Then
lef = lef - 2
Else
lef = lef - 1
End If
If lef <= 0 Then Exit For
Next
str = Left(content, lef)
Return str
End Function
@Luckyfish小文: 还是不行, response.Write(TypeName(rs02("news_Title"))),这个输出是Field
response.Write(vartype (rs02("news_Title"))) ,输出是8
@80后o(╯□╰)o囧囧:
为什么要加Type?
直接输出,不就是截取后的内容了吗
response.write(lleft(rs02("news_Title"),5))
还有,你这个方法感觉没什么意义啊,直接用Left不就行了!!!
Do While Not rs02.Eof and k<7
response.Write("<p><span class='date'>"&rs02("Creat_Date")&"</span>")
Dim str=rs02("news_Title")
str=str.Lenght>5?Left(str,5):str 这里判断下长度就可以了
response.write(str)
response.Write("</p>")
rs02.MoveNext
k=k+1
Loop
end if
@Luckyfish小文: 直接用Left可以截取,关键我这公共方法用的地方太多了,后面要加...省略号。
我之前用access数据库时,这些方法没有报错,现在升级到mssql以后,这些方法就报错,类型不匹配。
@Luckyfish小文: access数据库时,字段类型是text,转成mssql后,数据类型是nvarchar。