再加五十分!悬赏高手解决!

zhoufenghubei 2003-12-15 01:12:34
问题解决一并给分!
...全文
18 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqinzeng 2003-12-15
  • 打赏
  • 举报
回复
会不会是你哪个自动提交的属性设为true的原因。
killerdanny 2003-12-15
  • 打赏
  • 举报
回复
请吃饭了没有??
bomber2001 2003-12-15
  • 打赏
  • 举报
回复
if dw_1.update() = 1 then
if lds_temp.update() = 1 then
commit ;
else
rollback ;
end if
else
roolback ;
end if


当然也要考虑其保存的前后顺序,比如主外健的关系等
freebirdwjy 2003-12-15
  • 打赏
  • 举报
回复
代码上我看没有什么问题,你是不是忽略了什么小问题?
1、你DEBUG时确定它已经ROLLBACK了吗?如果没有,应用程序关闭时已经UPDATE的DATAWINDOW会自动COMMIT的。
2、有没有忽略DATAWINDOW的UPDATE属性?
jdsnhan 2003-12-15
  • 打赏
  • 举报
回复
总结上面各位所说的:
1、注意事物对象的连接,楼主用的是sqlcasw,而不是sqlca;与此事物对象相关的表都要注意
2、语句修改
int rtncode
dw_cust.SetTransObject(sqlcasw)
dw_sales.SetTransObject(sqlcasw)
rtncode = dw_1.Update(TRUE, FALSE)

IF rtncode = 1 THEN
rtncode = dw_2.Update(TRUE, FALSE)
IF rtncode = 1 THEN
dw_1.ResetUpdate()
dw_2.ResetUpdate()
COMMIT USING sqlcasw;
ELSE
ROLLBACK USING sqlcasw;
END IF
END IF
我测试了一下,没问题。
3、如果递交不成功,可以看看sqlca.sqlerrtext返回值。
guangli_zhang 2003-12-15
  • 打赏
  • 举报
回复

看看dw_1的事务,是不是sqlcasw
zhoufenghubei 2003-12-15
  • 打赏
  • 举报
回复
多谢各位帮忙!问题解决后一定给分!
xiao_bai 2003-12-15
  • 打赏
  • 举报
回复
还有sqlca.autocommit属性我始终设为false.
xiao_bai 2003-12-15
  • 打赏
  • 举报
回复
我做了一些主从表的窗口,也没遇到楼主说的情况啊。只用了
if dw_1.update() = 1 and dw_2.update() = 1 then
commit;
else
rollback;
end if
只要提交一次就没有问题。就如楼主所说其中一个窗口有了问题,commit肯定没有执行。怎么会修改后原来没问题的反而不能进数据库呢?

zhoufenghubei 2003-12-15
  • 打赏
  • 举报
回复
应该不会和我的事务对象sqlcasw有问题吧!!!!!!!!!!!!!!!!!!!!
lmby 2003-12-15
  • 打赏
  • 举报
回复
是你其他地方的问题。自己查一下。
其实debug就可以,只要没走到commit语句,就不会写到数据库。
lmby 2003-12-15
  • 打赏
  • 举报
回复
//做两个dw,分别对应那两张表,select all为数据源
//做一个窗口,放那2个数据窗口,放个按钮,代码为

int lret
sqlca.autocommit=false

lret=dw_1.update(true,false)
if lret=1 then
lret=dw_2.update(true,false)
if lret=1 then
COMMIT USING sqlca;
sqlca.autocommit=true
dw_1.resetupdate( )
dw_2.resetupdate( )
messagebox('提示','存盘成功')
else
ROLLBACK USING sqlca;
sqlca.autocommit=true
messagebox('提示','存盘失败,请检查数据')
end if
else
ROLLBACK USING sqlca;
sqlca.autocommit=true
messagebox('提示','存盘失败,请检查数据')
end if

//和你的代码一样,只是事务用的是sqlca不是sqlcasw
//没有你说的情况,都是一起提交。或者一起不提交。
lmby 2003-12-15
  • 打赏
  • 举报
回复
ok. 我测试过了。
drop table tb_o_i
go

CREATE TABLE [dbo].[tb_o_i] (
[c_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,--主键
[c_salerno] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_adno] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_ddt] [datetime] NULL ,
[c_fuid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_fdt] [datetime] NULL ,
[c_uid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_status] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_suid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_note] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[c_carno] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[c_driver] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_ywy] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_amount] [money] NOT NULL ,
[c_manager] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_accep_way] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_saletypex] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_old_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
primary key(c_id)) ON [PRIMARY]
GO

drop table tb_o_ig
go

CREATE TABLE [dbo].[tb_o_ig] (
[c_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,--主键
[c_gcode] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,--主键
[c_length] [decimal](12, 4) NOT NULL ,
[c_pack] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_ply] [decimal](12, 4) NOT NULL ,
[c_sigle_weight] [decimal](12, 4) NOT NULL ,
[c_city] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_face] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_pt_in] [decimal](12, 4) NOT NULL ,
[c_tax_rate] [decimal](6, 2) NOT NULL ,
[c_n] [decimal](12, 3) NOT NULL ,
[c_weight] [decimal](12, 3) NOT NULL ,
[c_order_weight] [decimal](12, 3) NOT NULL ,
[c_k] [decimal](18, 0) NOT NULL ,
[c_price] [decimal](18, 2) NOT NULL ,
[c_m_price] [decimal](18, 2) NOT NULL ,
[c_name] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[c_unit] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_amount] [decimal](18, 4) NOT NULL
primary key(c_id,c_gcode)) ON [PRIMARY]
GO
表结构和你一样对吧。
eminena 2003-12-15
  • 打赏
  • 举报
回复
同时进行判断:

 int lret_1,lret_2
sqlcasw.autocommit=false
 lret_1=dw_1.update(true,false)
lret_2=dw_2.update(true,false)
if lret_1=1 and lret_2 then
COMMIT USING sqlcasw;
sqlcasw.autocommit=true
dw_1.resetupdate( )
dw_2.resetupdate( )
 messagebox('提示','存盘成功')
else
           ROLLBACK USING sqlcasw;
 sqlcasw.autocommit=true
           messagebox('提示','存盘失败,请检查数据')
     end if
zhoufenghubei 2003-12-15
  • 打赏
  • 举报
回复
就是在dw_1和dw_2中输入数据,然后是两个存盘就行!(datawindow是要么一起存盘!要么都不存盘啊!)
lmby 2003-12-15
  • 打赏
  • 举报
回复
呵呵。吃饭就不要了。
lmby 2003-12-15
  • 打赏
  • 举报
回复
ok
相应的操作是什么?
zhoufenghubei 2003-12-15
  • 打赏
  • 举报
回复
lmby(鹿门布衣) ,搞定了过来我请你吃饭!
zhoufenghubei 2003-12-15
  • 打赏
  • 举报
回复
dw_1对应的表结构如下:
   CREATE TABLE [dbo].[tb_o_i] (
[c_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,----主键
[c_salerno] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_adno] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_ddt] [datetime] NULL ,
[c_fuid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_fdt] [datetime] NULL ,
[c_uid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_status] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_suid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_note] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[c_carno] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[c_driver] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_ywy] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_amount] [money] NOT NULL ,
[c_manager] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_accep_way] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_saletypex] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_old_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO


dw_2对应的表结构如下:
CREATE TABLE [dbo].[tb_o_ig] (
[c_id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,--主键
[c_gcode] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,--主键
[c_length] [decimal](12, 4) NOT NULL ,
[c_pack] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_ply] [decimal](12, 4) NOT NULL ,
[c_sigle_weight] [decimal](12, 4) NOT NULL ,
[c_city] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_face] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[c_pt_in] [decimal](12, 4) NOT NULL ,
[c_tax_rate] [decimal](6, 2) NOT NULL ,
[c_n] [decimal](12, 3) NOT NULL ,
[c_weight] [decimal](12, 3) NOT NULL ,
[c_order_weight] [decimal](12, 3) NOT NULL ,
[c_k] [decimal](18, 0) NOT NULL ,
[c_price] [decimal](18, 2) NOT NULL ,
[c_m_price] [decimal](18, 2) NOT NULL ,
[c_name] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[c_unit] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[c_amount] [decimal](18, 4) NOT NULL
) ON [PRIMARY]
GO

其中表tb_o_i和tb_o_ig是一对多的关系!
lmby 2003-12-15
  • 打赏
  • 举报
回复
我已经知道是一张主表和一张明细表。但是应该不会出现你说的情况,有点奇怪。你给我表结构,我调试一下看看,
加载更多回复(12)

1,076

社区成员

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

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