使用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"就不行了.不知是否有哪位高手能够帮小弟解决这个难题?

解决方案 »

  1.   

    prmStuName.Value = rs!cname
    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)
      

  2.   

    to:  zsgzsgzsg(zsg)
    首选谢谢你的回答,
    从你的程序来看,意思是 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编译器调试时的内部的问题呢?
      

  3.   

    通常这种错误是从别的数据库(非中文)中导入数据产生的。字符的ASSIC码=0,语句就结束了,造成语句不完整,所以产生错误。