环境:delphi7,sql2000,win2000 server
存储过程:
create procedure fsp_addmember 
                 @userid char(10),
                 @name char(10)
as
     insert member(userid,name) values(@userid,@name)
godelphi7调用:
type
    adosp: TADOStoredProc;
..
..
adosp.Active:=false;
adosp.ProcedureName:='fsp_addmember';
adosp.Parameters[1].Value:='aaa';   
adosp.Parameters[2].Value:=edtname.Text ;
adosp.ExecProc;调试到adosp.Parameters[1].Value:='aaa'; 这一句就出错"List index out of bounds(1)"
而且奇怪的是,有时候不出错,很不稳定!!!!!!!!!

解决方案 »

  1.   

    在adosp.Parameters[1].Value:='aaa';前加入
    adosp.Parameters.refresh 再试
      

  2.   

    数组是从0开始的Parameters[0]
    Parameters[1]
      

  3.   

    其实这并不是因为数组从第几个下标开始的问题,下标为[0]的参数其实是一个返回值,我们不用给它赋值,但上面的问题我也有遇过,最后是我自己解觉的,兄弟们不妨试一下!
    在你给参数赋值的时候不要使用数组的下标,而直接使用StoredProc的ParamsByName()这个属性来给参数赋值,这样就不会引起上面的问题!
    大家可以试一下,如果有问题可以直接给我发邮件![email protected]
      

  4.   

    其实这并不是因为数组从第几个下标开始的问题,下标为[0]的参数其实是一个返回值,我们不用给它赋值,但上面的问题我也有遇过,最后是我自己解觉的,兄弟们不妨试一下!
    在你给参数赋值的时候不要使用数组的下标,而直接使用StoredProc的ParamsByName()这个属性来给参数赋值,这样就不会引起上面的问题!
    大家可以试一下,如果有问题可以直接给我发邮件![email protected]
      

  5.   

    调试过很多次,各种方法,但是问题总是层出不穷,而且很不稳定,有时候怎样可以,但是保不准下次不行了,感觉还不如VB6里调用方便稳定.是不是delphi的bug?
    在Vb6或者vs.net里没碰到这么多问题,希望有人可以帮我,呵呵,最好不要打击我对我delphi的期望!!
      

  6.   

    先adosp.Parameters.refresh更新一下存储过程的参数,如果不更新,如果你这个存储过程以前用在别的存储过程名上,那么存储过程的参数还是以前用的其它存储过程的参数,如果原来的参数有两个,现在用的存储过程名的参数有三个,那么你写params[3]就会越界,刷新一下就行了
      

  7.   

    唉,好不容易解决了这个问题,但是又有新的问题,execSql的时候出错提示:"invalid variant operation" ,真TM烦!
      

  8.   

    字段类型看看,注意NULL 和'',还有' '是三种不同的东东
      

  9.   

    "invalid variant operation" 这个问题的原因是dcom连接没有打开,我已经解决,但是又出现别的问题:"对象信息不完整.....",我绝望了,抛弃用存储过程的念头!