首页 新闻 会员 周边

asp读取mssql返回的字段,使用自定义截取字符串方法爆类型不匹配

0
悬赏园豆:50 [已解决问题] 解决于 2020-01-06 17:25

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类型不匹配

asp
问题补充:

链接access数据库时,方法执行正常,切换到mssql2014时,爆类型不匹配、

80后o(╯□╰)o囧囧的主页 80后o(╯□╰)o囧囧 | 菜鸟二级 | 园豆:211
提问于:2020-01-02 18:27
< >
分享
最佳答案
0

数据类型转换问题。折腾几天终于完成了。

80后o(╯□╰)o囧囧 | 菜鸟二级 |园豆:211 | 2020-01-06 17:24
其他回答(1)
0

两个问题:
1、参数中指明类型
function lleft(content as String,lef as Integer)
....
end function
2、调用 的时候,你指定其中一个参数,没指定另一个参数lef(看你写的方法这是 要截取的长度吧)?
那调用 应该是:response.write(lleft(rs02("news_Title"),1)) 这样吧,,

收获园豆:50
Luckyfish小文 | 园豆:335 (菜鸟二级) | 2020-01-03 09:44

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

支持(0) 反对(0) 80后o(╯□╰)o囧囧 | 园豆:211 (菜鸟二级) | 2020-01-03 09:59

@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

支持(0) 反对(0) Luckyfish小文 | 园豆:335 (菜鸟二级) | 2020-01-03 10:28

@Luckyfish小文: 还是不行, response.Write(TypeName(rs02("news_Title"))),这个输出是Field
response.Write(vartype (rs02("news_Title"))) ,输出是8

支持(0) 反对(0) 80后o(╯□╰)o囧囧 | 园豆:211 (菜鸟二级) | 2020-01-03 10:35

@80后o(╯□╰)o囧囧:
为什么要加Type?
直接输出,不就是截取后的内容了吗
response.write(lleft(rs02("news_Title"),5))

支持(0) 反对(0) Luckyfish小文 | 园豆:335 (菜鸟二级) | 2020-01-03 11:04

还有,你这个方法感觉没什么意义啊,直接用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

支持(0) 反对(0) Luckyfish小文 | 园豆:335 (菜鸟二级) | 2020-01-03 11:11

@Luckyfish小文: 直接用Left可以截取,关键我这公共方法用的地方太多了,后面要加...省略号。
我之前用access数据库时,这些方法没有报错,现在升级到mssql以后,这些方法就报错,类型不匹配。

支持(0) 反对(0) 80后o(╯□╰)o囧囧 | 园豆:211 (菜鸟二级) | 2020-01-03 11:20

@Luckyfish小文: access数据库时,字段类型是text,转成mssql后,数据类型是nvarchar。

支持(0) 反对(0) 80后o(╯□╰)o囧囧 | 园豆:211 (菜鸟二级) | 2020-01-03 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册