以下是我的存储过程调用代码,该存储过程在程序中是循环调用的,第一次执行时都正常,到第二次执行存储过程时就会报错:错误提示为ACCESS violation at address 4DE43404 in module 'SQLOLEDB.DLL' ,read of address 00000018
              
以下为代码:
              proc_addrow.close;
              Proc_ADDRow.Parameters.clear;
              Proc_AddRow.ProcedureName:='ProcaddRowLong;1';
              Proc_ADDRow.Parameters.Refresh;
              Proc_AddRow.Prepared:=true;
              Proc_AddRow.Parameters.Refresh ;
              Proc_AddRow.Parameters.ParamValues['@NewNumid']:=ReturnNewNumid;
              Proc_AddRow.Parameters.ParamValues['@AddText']:=s;
              Proc_AddRow.Parameters.ParamValues['@LastColumnName']:=LastColumnName;
              Proc_AddRow.Parameters[4].Direction:=pdoutput;
              Proc_AddRow.ExecProc;  //出错地方              LastColumnName:=Proc_AddRow.Parameters.ParamValues['@NewColumnName'];代码到此为止。已经检查的地方:
   1\第一次proc_addrow.execproc执行正常,第二次执行到proc_addrow.execproc时就报错。
   2\在sql查询分析器里,执行多次执行ProcaddRowLong存储过程都是正常执行的,不会报任何错误,但到dephi中循环调用存储过程就出错了。请帮忙看看

解决方案 »

  1.   

    Proc_ADDRow.Parameters.clear  去掉试试
      

  2.   

    proc_addrow.close; 
    Proc_ADDRow.Parameters.clear;   //这句删掉
    Proc_AddRow.ProcedureName:='ProcaddRowLong;1'; 
    Proc_ADDRow.Parameters.Refresh; 
    Proc_AddRow.Prepared:=true;   //这句删掉
    Proc_AddRow.Parameters.Refresh ;   //这句删掉
    Proc_AddRow.Parameters.ParamValues['@NewNumid']:=ReturnNewNumid; 
    Proc_AddRow.Parameters.ParamValues['@AddText']:=s; 
    Proc_AddRow.Parameters.ParamValues['@LastColumnName']:=LastColumnName; 
    Proc_AddRow.Parameters[4].Direction:=pdoutput; 
    Proc_AddRow.ExecProc;  //出错地方 
      

  3.   

    proc_addrow.close; 
    Proc_AddRow.ProcedureName:='ProcaddRowLong;1'; 
    Proc_AddRow.Parameters.ParamValues['@NewNumid']:=ReturnNewNumid; 
    Proc_AddRow.Parameters.ParamValues['@AddText']:=s; 
    Proc_AddRow.Parameters.ParamValues['@LastColumnName']:=LastColumnName; 
    Proc_AddRow.Parameters[4].Direction:=pdoutput; 
    Proc_AddRow.ExecProc;  //出错地方