怎样使这个存储过程返回值

daemons467 2006-07-28 02:47:16
CREATE PROCEDURE [dbo].[p_manager_login]
@manager_id int,
@manager_pwd varchar(50)
--@passmid int output
AS
declare @passmid int;
declare @m_id int;
declare @maxid int;
BEGIN
select @m_id=manager_id from manager_login where manager_id=@manager_id and manager_pwd=@manager_pwd;
if @m_id<>0
begin
select @maxid=max(login_id)+1 from manager_login_log;
insert manager_login_log values (@maxid,@m_id,cast(getdate() as varchar(50)));
end ;
set @passmid=@m_id;
END;
return @passmid;

transaction login_trans
login_trans= create transaction
login_trans.DBMS = "ODBC"
login_trans.AutoCommit = False
login_trans.DBParm = "ConnectString='DSN=sql_server_2005;UID=sa;PWD=sql'"
connect using login_trans;
if login_trans.sqlcode=0 then
else
messagebox('错误','数据库连接失败!错误信息:'+login_trans.sqlerrtext,exclamation!)
return;
end if

integer mid
mid=integer(sle_1.text)
String pwd
pwd=sle_2.text
declare P_login PROCEDURE FOR p_manager_Login :mid,:pwd sing login_trans;
///*@manager_id=*/:mid,/*@manager_pwd=*/:pwd/*@passmid=*///:pss_mid// output
//using login_trans;
execute p_login;
integer pss_mid;
fetch P_login into :pss_mid;
close p_login;
if login_trans.sqlcode<>0 then
rollback;
messagebox(string(login_trans.sqlCode),String(pss_mid)+login_trans.sqlerrtext)
else
messagebox(string(pss_mid),'')
end if

disconnect using login_trans;
destroy login_trans;

PB9.0 sql server2005 odbc
...全文
268 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
daemons467 2006-07-30
  • 打赏
  • 举报
回复
问题已经解决了,就是采用直连才可以,ODBC OLEdb都试过了 提示什么造型的错误,不返回值的存储过程还能用;要是调用的存储过程有返回值,就不能用,会提示游标没有被打开。可能是这两种驱动下的存储过程的调用格式不是这样的吧(还没有找到相关的资料~~~)
原来还以为是SQL SERVER2005与SQL SERVER2000对于PB有什么不一样的地方,谢谢liuzyl() 的帮助,就是采用直连
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "manager_management"
SQLCA.LogPass = "sql"
SQLCA.ServerName = "127.0.0.1"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = True
SQLCA.DBParm = "CommitOnDisconnect='No'"
daemons467 2006-07-30
  • 打赏
  • 举报
回复
问题已经解决了,就是采用直连才可以,ODBC OLEdb都试过了 提示什么造型的错误,不返回值的存储过程还能用,有了返回值,还会提示游标没有被打开,可能是这两种驱动下的存储过程的调用格式不是这样的吧(还没有找到相关的资料~~~)
原来还以为是SQL SERVER2005与SQL SERVER2000对于PB有什么不一样的地方,谢谢liuzyl() 的帮助,就是采用直连
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "manager_management"
SQLCA.LogPass = "sql"
SQLCA.ServerName = "127.0.0.1"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = True
SQLCA.DBParm = "CommitOnDisconnect='No'"

liuzyl 2006-07-28
  • 打赏
  • 举报
回复
DECLARE p_manager_login PROCEDURE FOR
p_manager_login
@manager_id = :aa, @manager_pwd =:bb,@passmid = :cc;

EXECUTE p_manager_login;
fetch p_manager_login into :cc;
close p_manager_login;

cc 就是返回的值
liuzyl 2006-07-28
  • 打赏
  • 举报
回复
数据库连接方式要用sql直连 不能用 ODBC
liuzyl 2006-07-28
  • 打赏
  • 举报
回复

EXECUTE pd_member;

fetch pd_member into :tid;
close pd_member;


DECLARE p_manager_login PROCEDURE FOR
p_manager_login
@manager_id = :Value1, @manager_pwd =Value2,@passmid = : aa;

EXECUTE p_manager_login;

close p_manager_login;

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧