怎样将数据窗口里生成的数据写进后台数据库表里面?

MichaelW666 2009-12-22 06:20:46
Long Row
String Is_OrderNO
uo_buildorderno uo_1
Is_OrderNO=uo_1.uo_buildorderno()//此处是调用一个自定义对象(存储过程调用)生成一个订单编号
Row=dw_2.InsertRow(0)

dw_2.Object.Orderno[Row]=Is_OrderNO

//存储过程,此过程没有错误,贴出来参考而已。
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE BuildOrderNO
@OrderNO VarChar(12) OUTPUT
AS
--生成生产编号
DECLARE @MAXOrderNO VarChar(12)
DECLARE @StartOrderNO VarChar(5)
DECLARE @EndOrderNO VarChar(5)
DECLARE @EndOrderNOID Integer

SET @StartOrderNO=CONVERT(VarChar(4),GETDATE(),12)
SELECT @MAXOrderNO=MAX(OrderNO)
FROM SalesOrder
WHERE OrderNO LIKE @StartOrderNO+'%'
IF @MAXOrderNO IS NULL
BEGIN
SET @OrderNO=@StartOrderNO+'001'
RETURN 0
END
SET @EndOrderNO=RIGHT(@MAXOrderNO,3)
SET @EndOrderNOID=CONVERT(Integer,@EndOrderNO)
SET @EndOrderNOID=@EndOrderNOID+1
SET @EndOrderNO=CONVERT(VarChar(5),@EndOrderNOID)
SET @EndOrderNO=SPACE(3-LEN(@EndOrderNO))+@EndOrderNO
SET @EndOrderNO=REPLACE(@EndOrderNO,SPACE(1),'0')
SET @OrderNO=@StartOrderNO+@EndOrderNO
RETURN 0

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

我现在想将我调用存储过程自动生成的订单编号插入到后台数据库表OrderNO中,我怎么在PB中使用Insert插入不了呢?

我想直接在pb中插入到后台数据库表中,而不是利用存储插入,那个我会。
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pb8 2009-12-22
  • 打赏
  • 举报
回复
提示信息的意思是数据窗口没有更新容器,
在出现的窗口中选择Allow update
并选择更新的表及更新字段,关键字等,
保存后就可以了~~
pb8 2009-12-22
  • 打赏
  • 举报
回复
呵呵,是数据窗口对象的update属性没设置好,
rows->update properties菜单里面的
MichaelW666 2009-12-22
  • 打赏
  • 举报
回复
我定义的那个对象的函数是返回这个存储过程的返回值,但是我对数据窗口进行update再commit后,并不能将生成的数据保存到后台数据库中啊。还报了一个错误‘Datawindow does not have UPDATE Capability’?
pb8 2009-12-22
  • 打赏
  • 举报
回复
楼主的描述有些不清楚的地方:
1、我现在想将我调用存储过程自动生成的订单编号插入到后台数据库表OrderNO中,我怎么在PB中使用Insert插入不了呢?
你指的插入不了是什么意思,按你上面的代码,如果你定义的那个对象的函数是返回这个存储过程的返回值的话,对数据窗口进行update再commit后应该就有记录了呀,你指的insert插入不了是指哪?

2、我想直接在pb中插入到后台数据库表中,而不是利用存储插入,那个我会。
你的存储过程只是生成一个编号,什么时候实现了插入呢,如果你不想用存储过程的话根据存储过程定义的编号规则把代码直接写到pb里就可以呀
string ls_pre,ls_id,ls_maxid
Long Row
long ll_id

ls_pre = string(today(),'yymm')
SELECT MAX(OrderNO) into :ls_maxid
FROM SalesOrder
WHERE OrderNO LIKE :ls_pre+'%' ;
if IsNull(ls_maxid) then ls_maxid=''
ll_id = long(right(ls_maxid,3))
ll_id++
ls_id = ls_pre + string(ll_id,'000')

Row=dw_2.InsertRow(0)

dw_2.Object.Orderno[Row]=ls_id

wixinyoyo 2009-12-22
  • 打赏
  • 举报
回复
自动生成流水号就用一个序列就行了

609

社区成员

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

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