首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

PB調用SQL server的存儲過程解决思路

2012-03-24 
PB調用SQL server的存儲過程存儲過程如下:ALTERPROCEDURE pro_rang_inf@as_orderno varchar(20),@as_range

PB調用SQL server的存儲過程
存儲過程如下:
ALTER PROCEDURE pro_rang_inf
@as_orderno varchar(20),
@as_rangeno varchar(20),
@as_matsno varchar(50),
@as_type char(1),
@as_type1 char(1), --材料或印花
@re_rep_qty decimal(9,2) output, --報欠數量
@re_pur_qty decimal(9,2) output, --採購數量
@re_deliver datetime output, --預計交期
@re_conf datetime output, --確認交期
@re_use_qty decimal(9,2) output, --已使用數量
@re_rep_qty2 decimal(9,2) output --其它訂單報欠數量
 AS

 --取得F&C訂單號
declare @ls_orderno varchar(20), @ls_matsno varchar(50)

select @ls_orderno = order_no 
  from Sample_Order
 where LEFT(order_no,1) = @as_type
  and order_range = @as_rangeno
  and order_type like 'F&C%'

--取得此材料報欠數量、採購數量、預計交期和確認交期
if @as_type1 = 'A'
begin
  select @re_rep_qty = report_qty from Report_Mats
  where order_no = @ls_orderno
  and mats_description = @as_matsno
  --取得採購數量
  select @re_pur_qty = purchase_qty,@re_deliver = ex_date,@re_conf = deliver_date
  from dbo.Purchase_Mats
  where order_no = @ls_orderno
  and mats_description = @as_matsno
  --取得同系列訂單其它訂單的需求量和報欠數量
  select @re_use_qty = sum(isnull(mats_qty,0)),@re_rep_qty2 = sum(isnull(report_qty,0))
  from Sample_Order,Report_Mats
  where Sample_Order.order_no = Report_Mats.order_no
  and left(Sample_Order.order_no,1) = @as_type
  and order_range = @as_rangeno
  and Sample_Order.order_type not like 'F&C%'
  and Sample_Order.order_no <> @as_orderno
end 
else 
begin
  select @re_rep_qty = print_qty,@re_deliver = sourcing_reply_delivery from print_process
  where order_no = @ls_orderno
  and print_no= @as_matsno
end 


PB調用如下:
declare pr_c1 procedure for dbo.pro_rang_inf
  @as_orderno = :is_order,
@as_rangeno = :ls_rangeno,
@as_matsno = :ls_matno,
@as_type = :ls_type,
@as_type1 = 'A' using sqlca;
execute pr_c1;
if sqlca.sqlcode <> 0 then 
  messagebox("錯誤:","錯誤信息"+ sqlca.SQLErrText)
  return 1
end if
fetch pr_c1 into :ld_rep_qty,:ld_pur_qty,:ldt_deliver_date,:ld_conf_date,:ld_use_qty,:ld_rep_qty2;
close pr_c1;


當在程序運行時,系統會報如下的錯誤信息:
pro_rang_inf expects parameter '@re_rep_qty', which was not supplied

請問問題出在那兒,謝謝!

[解决办法]
看上去存储过程里报错嘛
[解决办法]
PB中調用存儲過程的代碼貼出來看看!
[解决办法]
先去调试下存储过程看看
[解决办法]
declare sp_xxxx procedure for
 sp_xxxx(x,x,x,x,....);
execute sp_xxxx;

[解决办法]
13.调用SQL Server存储过程问题(通过ODBC连接sqlserver数据库调用存储过程并获得return或output的值)
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')
保证能用,无论是ODBC还是直连,

[解决办法]
存储过程调用,还有好多参数没传递
[解决办法]
输出参数也要传递


PB調用如下:
dec re_rep_qty,re_pur_qty,re_use_qty,re_rep_qty2
datetime re_deliver,re_conf
declare pr_c1 procedure for dbo.pro_rang_inf
@as_orderno = :is_order,
@as_rangeno = :ls_rangeno,
@as_matsno = :ls_matno,
@as_type = :ls_type,
@as_type1 = 'A' using sqlca
@re_rep_qty =:re_rep_qty output, 
@re_pur_qty =:re_pur_qty output,
@re_deliver =:re_deliver output, 
@re_conf =:re_conf output, 
@re_use_qty =:re_use_qty output, 
@re_rep_qty2 =:re_rep_qty2 output ;
execute pr_c1;
if sqlca.sqlcode <> 0 then
messagebox("錯誤:","錯誤信息"+ sqlca.SQLErrText)
return 1
end if
fetch pr_c1 into :ld_rep_qty,:ld_pur_qty,:ldt_deliver_date,:ld_conf_date,:ld_use_qty,:ld_rep_qty2;
close pr_c1;
[解决办法]

探讨
输出参数也要传递


PB調用如下:
dec re_rep_qty,re_pur_qty,re_use_qty,re_rep_qty2
datetime re_deliver,re_conf
declare pr_c1 procedure for dbo.pro_rang_inf
@as_orderno = :is_order,
@as_rangeno = :ls_rangen……

[解决办法]
应该不是问题的问题
[解决办法]
@re_rep_qt参数出错,检查赋值

热点排行