pb中调用存储过程问题。请高手帮忙看看。

yjianp 2007-09-28 11:43:14
-----------过程如下-----------------
ALTER proc proc_restoredata
@bkfilepath varchar(200),@database_name varchar(100),@ls_err varchar(200) output
as
begin
declare @data_lname varchar(100)
declare @log_lname varchar(100)
declare @data_path varchar(500)
declare @log_path varchar(500)
create table #t(logicalname nvarchar(200),
physicalname nvarchar(200),
type varchar(10),
filegroupname varchar(20),
size bigint,
maxsize bigint)
insert into #t exec('RESTORE FILELISTONLY FROM DISK = N''' + @bkfilepath + '''')

if @@error<>0 or (@@rowcount <= 0)

begin
set @ls_err=@bkfilepath+' 不是有效的数据库备份文件!'
return -1
end

select @data_lname=logicalname from #t where type='D'
select @log_lname=logicalname from #t where type='L'

select @data_path=rtrim(reverse(filename)) from sysdatabases where name=@database_name
if (@data_path is null)
begin
set @ls_err='数据库中没有名为 '+@database_name+' 的数据库'
return -1
end
select @data_path=reverse(substring(@data_path,charindex('\',@data_path),200))
commit;
set @log_path= @data_path+@log_lname+'.ldf'
set @data_path= @data_path+@data_lname+'.mdf'

declare @sqlstring varchar(2000)
set @sqlstring='RESTORE DATABASE '+ @database_name +
' FROM DISK = '''+ @bkfilepath +'''
WITH MOVE '''+ @data_lname + '''
TO '''+@data_path+''',MOVE ''' + @log_lname + '''
TO '''+@log_path+''''



exec(@sqlstring)

if @@error<>0 or (@@rowcount <= 0)

begin
set @ls_err='恢复数据库失败!'
return -1
end

set @ls_err=''

return 1



end
-----------调用如下-----------------
DECLARE restore_proc PROCEDURE FOR proc_restoredata
@bkfilepath=:bkfilepath,
@database_name=:_DbName,
@sqlstring=:ls_err output
using sqlca;
execute restore_proc;
fetch restore_proc into :ls_err;
close restore_proc;


执行到execute restore_proc;这一步时
sqlerrtext的内容为:@sqlstring 不是过程 proc_restoredata 的参数。

执行到execute restore_proc;这一步时
sqlerrtext的内容为:Cursor is not open

最后是:Procedure has not been executed or has no results

请大家帮忙看看。
...全文
288 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
Awang_126 2007-09-29
  • 打赏
  • 举报
回复
你这样处理下看:

1、新建一个standard class,并在select standard class type 中选择transaction,这时会打开一个声明函数的窗口
2、在上面的窗口上选择底部的 Declare instance variables 页,在变量类型的下拉框中选择 Local External Functions
3、在空白处右键选择aste -> SQL->remote stored procedure,回出现选择存储过程的窗口,选择即可生成函数
如: CREATE PROCEDURE sp_test (@pinput varchar(10))
AS
return 1000
GO
选择sp_test的时候生成如下函数声明
function long sp_test(string pinput) RPCFUNC ALIAS FOR "dbo.sp_test"
4、保存你的对象为:uo_tran
5、双击打开应用,选择additional properties ->variable types,修改SQLCA中的 transaction为uo_tran即可
6、然后你在程序中就可以象使用函数一样调用您的存储过程,如:
integer li_return

li_return=Sqlca.sp_test('111')
yjianp 2007-09-28
  • 打赏
  • 举报
回复
补充一点,在查询分析器中执行成功。

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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