使用ADO, 用 带参数的查询 中碰到这样的问题:(1) 下面是命令对象和参数对象的设置:
Set cmdSearchStu = New Command
With cmdSearchStu
.CommandText = "Select 学生编号 from 学生 where 联系人姓名=?"
.CommandType = adCmdText
.Prepared = True
Set .ActiveConnection = m_conn
End With
'创建参数:
Set prmStuName = cmdSearchStu.CreateParameter("StuName", adChar, adParamInput, 20) '注意: 参数的大小设为20, 在应用中已足够大(2) 在运行时是这两句:
prmStuName.Value = rs!cname
Set rs2 = cmdSearchStu.Execute(, prmStuName)极为奇怪的是, 在几万条记录中, 偏偏就有几条在运行时出错, 提示为
"[Microsoft][ODBC Microsoft Access Driver]字符串数据,右截断 (null)"
这几条记录的 联系人姓名 字段值分别为:
IK Choi
Liza Law
Sonny Tan
等等.
我在立即窗口中运行Set rs2 = cmdSearchStu.Execute(, prmStuName)
反复测试, 发现甚至值为 "IK CH", "IK Cho"都可以正常运行, 到"IK choi"就不行了.不知是否有哪位高手能够帮小弟解决这个难题?
Set cmdSearchStu = New Command
With cmdSearchStu
.CommandText = "Select 学生编号 from 学生 where 联系人姓名=?"
.CommandType = adCmdText
.Prepared = True
Set .ActiveConnection = m_conn
End With
'创建参数:
Set prmStuName = cmdSearchStu.CreateParameter("StuName", adChar, adParamInput, 20) '注意: 参数的大小设为20, 在应用中已足够大(2) 在运行时是这两句:
prmStuName.Value = rs!cname
Set rs2 = cmdSearchStu.Execute(, prmStuName)极为奇怪的是, 在几万条记录中, 偏偏就有几条在运行时出错, 提示为
"[Microsoft][ODBC Microsoft Access Driver]字符串数据,右截断 (null)"
这几条记录的 联系人姓名 字段值分别为:
IK Choi
Liza Law
Sonny Tan
等等.
我在立即窗口中运行Set rs2 = cmdSearchStu.Execute(, prmStuName)
反复测试, 发现甚至值为 "IK CH", "IK Cho"都可以正常运行, 到"IK choi"就不行了.不知是否有哪位高手能够帮小弟解决这个难题?
If prmStuName <> "" Then
If Asc(Right(prmStuName, 1)) = 0 Then
prmStuName= Left(prmStuName, Len(prmStuName) - 1)
End If
End If
Set rs2 = cmdSearchStu.Execute(, prmStuName)
首选谢谢你的回答,
从你的程序来看,意思是 prmStuName.Value的最后一个字符的 0 时,引发了这个错误 ,是吗?
可是:
(1) rs!cname的最后一个字符为什么会是 '\0' 呢?
(2) 是'\0'又为什么会出错呢?
(3)为什么绝大多数数据都没有问题呢, 并且我在测试时, 用
语句 Set rs2 = cmdSearchStu.Execute(, "IK choi")也会出错, 而Set rs2 = cmdSearchStu.Execute(, "IK cho")就能够通过, 这总不会因为"IK choi"后面是0而"IK cho"后面不是0 吧另外, 我再把程序全编译后执行,好像就没有发生类似的问题了,
这会不会是VB编译器调试时的内部的问题呢?