一个存储过程参数的问题(20分)

  • 主题发起人 主题发起人 cansum
  • 开始时间 开始时间
C

cansum

Unregistered / Unconfirmed
GUEST, unregistred user!
CREATE PROCEDURE Get_Po_Date (
@Po_No char(10)
)
AS select po_date from po_h where po_no=@po_no
上面的这是SQL2000中定义的一个存储过程
adostoredproc1.Parameters.Clear;
adostoredproc1.ProcedureName:='Get_Po_Date';
adostoredproc1.Parameters.ParamByName('@Po_No').Value:=edit1.Text;
adostoredproc1.ExecProc;
这是在Delphi6.0中调用的一个过程.当执行到第三句时出错,提示'@Po_No'没有找到
 
>>adostoredproc1.Parameters.Clear;
被你清掉了,它不会在赋予存储过程名时自动加回去的
要Create它
adostoredproc1.Parameters.CreateParameter()
 
去掉adostoredproc1.Parameters.Clear這一句還是一樣的錯誤提示
 
我想这也许是delphi ADOStoredProc的一个Bug,
它的参数有时正确,有时一直提示找不到参数,但实际上
在它的属性编辑框中的确存在。我的解决办法是
如果提示找不到参数,那么就打开parameters属性中,
并且在parameters.value子属性下type中把它的类型直接赋予
与实际相同的参数类型后,再运行就不提示了
 
如果你的ADOStoredProc1的Parameters是空的,你应该在程序中加入:
adostoredproc1.Parameters.Clear;
adostoredproc1.ProcedureName:='Get_Po_Date';
ADOStoredProc1.Parameters.AddParameter;
ADOStoredProc1.Parameters[0].Name:='@Po_No';
ADOStoredProc1.Parameters[0].Direction:=pdInput;
ADOStoredProc1.Parameters[0].DataType:=ftString;
ADOStoredProc1.Parameters[0].Precision:=10;
adostoredproc1.Parameters[0].Value:=edit1.Text;
adostoredproc1.ExecProc;
即动态添加参数.
如果你的ADOStoredProc1的Parameters是已有该参数且参数的个数与类型与该存储过程
完全以至,即静态固定存储过程调用.你:
adostoredproc1.Parameters[0].Value:=edit1.Text;
adostoredproc1.ExecProc;
 
这样应该可以:
adostoredproc1.Parameters[0].Value:=edit1.Text;
adostoredproc1.ExecProc;
用你原来的方法:(不太清楚)
adostoredproc1.Parameters.ParamByName('Po_No')<---(参数可能是这个).Value:=edit1.Text;
adostoredproc1.ExecProc;
 
首先謝謝上面各位的發言,但都通不過
我用的環境是win2000+Delphi6.0+SQL2000+DElphi update2
 
各位,我自己搞定了,換了一個Adoquery控件調用這個存儲過程.代碼如下:
adoquery1.Close;//關閉
adoquery1.SQL.Clear;//清除
adoquery1.SQL.Text:='exec Get_Po_Date '+edit1.Text;//加入存儲過程和參數
adoquery1.Prepared;
adoquery1.Open;
不過還是再次感謝大家的參與,謝謝
但我希望大家能夠踊躍發言,因為執行存儲過程我還是希望能用adostoredproc控件
 
我来一个简单例子——
var
tmpsp:TADOStoredProc;
begin
tmpsp:=tadostoredproc.Create(nil);
tmpsp.Connection:=mainfrm.acomain;
tmpsp.ProcedureName:='checkzpzyrb';
tmpsp.Parameters.CreateParameter('@jgfl',ftstring,pdinput,12,dijgfl.EditText);
tmpsp.Prepared;
tmpsp.ExecProc;

tmpsp.Close;
tmpsp.Free;
end;
 
多人接受答案了。
 
后退
顶部