我的數據庫存儲器代碼如下:
CREATE PROCEDURE fPurch_store(@StringItem char)
as
  set nocount on
     declare @fStoreapp varchar (20)
    .....
     from purcheseapp where purcheseapp=@stringItem
    ...
在delphi中是這樣調用的
    begin
      ADOStoredProc2.Parameters.Clear;
      ADOStoredProc2.Parameters.Add;
      ADOStoredProc2.Parameters[0].Name :='@StringItem';
      ADOStoredProc2.Parameters.ParamByName('@StringItem').Value:=string(edit2.Text);
      ADOStoredProc2.execproc;
end;
但運行是它總是寫入一筆空值,我在存儲器中硬賦值給@stringItem能寫入一批記錄,在DELPHI中用上面代碼寫入的是空值,其原因是賦值沒有真正賦給存儲器中的@stringItem,這樣造成每次運行時,只執行一個空指令,請高手幫忙解決此問題,謝謝!!!!

解决方案 »

  1.   

    ADOStoredProc2.Close;
    ADOStoredProc2.ProcedureName:='fPurch_store';
    ADOStoredProc2.Parameters.Refresh;ADOStoredProc2.Parameters[1].value:=edit2.Text;
    ADOStoredProc2.execproc;
      

  2.   

    存储过程控件的参数中好像有几个是特殊的参数,像是过程的状态返回什么,应该是排在你的参数前的,所以你复制给0号参数,实际并没有给你的参数赋值,因此没结果,具体我也忘记了,呵呵你应该可以使用设计器中的自动功能,让Delphi帮你生称参数列表,就像查询控件中的字段列表一样,看看它的规律,然后就可以在代码中控制了
      

  3.   

    wycg_cnh20(发奋图强中):你這條代砪跟 我的大同小異,還是不能成功
    iBear(大熊 不要怀疑我的温柔):你能說的具體一些嗎?我上面的代碼要怎樣修改才能達到我的要求。
      

  4.   

    我印象中,存储过程控件中,前几个参数是系统占用了,然后才是你在定义存储过程时使用的参数,因此你给第一个参数赋值--就是下标为0的,实际上并没有给你自己的参数赋值如果你在设计器中让IDE给你创建参数列表,就像字段列表一样,那应该会把所有的参数都给列出来的,你应该发现你的参数不是第一个详细的我也想不起来了,有些时候没用delphi和数据库了。也许你的问题并不是这个造成的,呵呵
      

  5.   

    iBear(大熊 不要怀疑我的温柔):按道理我用ADOStoredProc2.Parameters[0].Name :='@StringItem';
          ADOStoredProc2.Parameters.ParamByName('@StringItem').Value:=string(edit2.Text);已將下標為0的指派給@stringItem再給它賦值應該是沒錯啊?可還是沒有賦給@stringItem這到底是為什麼?
      

  6.   

    我也发现这个问题,听讨厌的,我是打开ADOStoredProc2的设置面板的参数,把第一个参数值,一般是返回值吧,删除掉就可以了
      

  7.   

    存储过程的Parameters[0]为返回参数,而传入存储过程的参数应写在AS前,在ADOStoredProc中分另是从Parameters[1]开始,用Parameters[1].value赋值.
      

  8.   

    加上ADOStoredProc1.Parameters[0].Direction:=pdInput试试!
      

  9.   

    var
      sproc: TAdostoreprocedure;
    begin
      sproc:= TAdostoreprocedure.create(nil);
      with sproc do 
      try
      connection:= adoconn;//数据库连接adoconntion  procedurename:= 'proc_name'; //存储过程名称
      with parameters.addparameter do 
      begin
        name:= 'p_name';//参数名称
        datatype:= ftinteger;
        direction:= pdinput;
        value:= spedit.value;
      end;
      
      try 
        execproc;
      except
        //
      end;  finally
       free;
      do;
      end;