关于存储过程 如果半小时之内没有解决的话 我就死定啦 !!(100分)

  • 主题发起人 wangsangwu
  • 开始时间
W

wangsangwu

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要使用一个存储过程
我用的是TadoStorproc 程序如下:
MyStorePro.Parameters.ParamByName('@UserId').Value := UserId;
MyStorePro.Parameters.ParamByName('@RoleId').Value := RoleId;
MyStorePro.ExecProc;
returnint := MyStorePro.Parameters.ParamByName('@RETURN_VALUE').Value;

结果他老是说我的参数没有找到 可是我在属性栏里可以看到3个参数
而且 他在有的界面是好的 在一些界面是坏的
我调他一个晚上了 如果高不定 我就死定啦
我听说好像是这个控件的bug 不知道那里有补丁
 
1) 在AdoStoreProc控件的ProcedureName里刪掉存儲過程名稱
2) 重新選擇存儲過程名稱!
3) 點擊Parameters就可以看到Server端定義的參數!
4) 運行程序再次調用參數看還有沒有錯!
 
不行 还是说我得参数没有Found

MyStorePro.ProcedureName := 'ValideIfhasPower ';
MyStorePro.Parameters.ParamByName('@UserId').Value := UserId;
MyStorePro.Parameters.ParamByName('@RoleId').Value := RoleId;
MyStorePro.ExecProc;
returnint := MyStorePro.Parameters.ParamByName('@RETURN_VALUE').Value;
 
试试在调用时
MyStorePro.ProcedureName := 'ValideIfhasPower ';
MyStorePro.Parameters.Refresh;
 
你Connection里所定義的字符串里所連接的數據庫是不是你存儲過程所在的
數據庫?
 
还是不行
连的是同一个数据库
 
Connection里定義的是一個字符串,還是單獨的一個Adoconnection控件。
若是Adoconnection控件是否已設置connected為True!
另外在執行程序之前,所要聯接的數據庫是否已經打開?
 
connnection 连的是一个控件
它在程序启动是就会被打开 肯定和数据库是连着的
 
存储过程:
还有参数的类型,输出类型都要设定。
 
MyStorePro.open;
 
删除这个控件,然后重新建立,别不相信,有的时候就是很邪门的。
 
已经试过了
 
你这样肯定不可以了!
返回值的那个参数,你看设置是否对?就是因为那个参数不对,才有这个提示。
 
在設計模式按F9調試,看是哪個參數沒有發現!
或者,先調用前面兩個參數執行后看能否成功!
總之,要細心的分析問題!
 
MyStorePro.Parameters[1].Value := UserId;
MyStorePro.Parameters[2].Value := RoleId;
MyStorePro.ExecProc;
returnint := MyStorePro.Parameters[0].Value;

试试看了!!!
 
创建为dbo。存储过程名,或从新更改一下adoconnection
 
在程序中指定存储过程名后,参数可能要先建立后才能使用!
 
我也遇到過這個問題﹐我想可能是在多個數據集中用到了
相同的參數名﹐而且它們的作用范圍又可能是全局的(我的猜測)。
最后只好在存儲過程中改參數名﹐
在Delphi中把元件ADOConnection1的Connected屬性改為False
再重新用一個ADOStoredProc1元件﹐就沒有問題了。
 
看看用tadoquery:
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('exec 储存过程名' + UserId + ',' + RoleId);
//UserId .RoleId应该都是字符型的。
adoquery1.execsql;
 
这样做
在存储过程里另设一个OUTPUT型的参数,用它来返回值,不要用STOREPROC的@return_value
 
顶部