关于PB事务的问题

luotou1978 2006-11-23 12:34:46
做PB那么久了,一直很迷惑:我们在控制PB事务的时一般是显示地提交或回滚事务作为事务结束的标志,那么我们是在什么时候开始事务的呢?假如有个界面是在用户检索数据后进行修改后保存的。是在数据窗口检索数据的时候?还是在保存前启动的事务呢?
...全文
908 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxun0997 2007-02-10
  • 打赏
  • 举报
回复
不用争了,当然是Connect;时开始事务的!!!
anzhuge 2006-12-22
  • 打赏
  • 举报
回复
迷茫!!
anzhuge 2006-12-22
  • 打赏
  • 举报
回复
多事务?第一次与数据库尝试连接成功,就应该是第一个事务的开始,以后若再不创建新的事务,整个对数据库的操作,都是应该使用这一个事务来完成的!
温飞_会员 2006-12-04
  • 打赏
  • 举报
回复
本人认为:建立连接事务开始,之后的事物开始是commit之后
yangjianw2004 2006-12-02
  • 打赏
  • 举报
回复
同意 liubocy(天道酬勤)
liubocy 2006-12-02
  • 打赏
  • 举报
回复
SQLCA.AutoCommit = TRUE时,
我认为在PowerScript中Insert、Update、Delete语句都将建立一个事物,并在语句运行结束后自动Commit提交。这个时候代码里写Commit或RollBack语句将没有任何作用。而数据窗口的增、删、改可以看作是一条SQL语句。

SQLCA.AutoCommit = False时,
观点认同 MakeToday(改变)
iamx 2006-11-27
  • 打赏
  • 举报
回复
汗!!!一直以为自己了解PB的事务特性,到今天才发现自己还是错了。

PB 帮助中 Connect 条目中对事务有比较详细的说明。大家可以打开帮助,选 Index 标签页,输入 Connect 就可以了。
MakeToday 2006-11-25
  • 打赏
  • 举报
回复
自己想法

tansaction xx 定义事务(不开始事务)

begin:
update/insert/delete using xx 使用事务
settransobject

使用事务时,事务对象检查事务的层数,如果没有开始事务则开始事务(begin tran),     然后保存事务点(save tran xx),执行语句,语句执行失败时回滚到保存点(这样不会影响其它语句的执行结果),成功不处理.

commit/rollback 提交或撤消事务的执行结果.事务被结束
goto begin:

也就是说,执行语句时若事务未开始则开始一个新事务,保存当前事务,执行语句,语句执行失败,回滚到保存点(只回滚当前的操作,不影响以前的数据).提交事务或撤消事务来结束该事务,不断重复这个处理过程.



feixianzhi 2006-11-25
  • 打赏
  • 举报
回复
个人认为定义事务的时候事务已经开始,只是没有执行而已,
settransobject(transaction)只是将datawindow与事务关联!
polestarxu 2006-11-25
  • 打赏
  • 举报
回复
同意楼上的,
1.update(包括dw,ds的)/insert/delete 开始
2.commit/rollback进行提交或回滚
如果在1执行后没有执行2,有可能会锁住数据库,形成死锁
asus1111 2006-11-24
  • 打赏
  • 举报
回复
Statement Description
CONNECT Establishes the database connection. After you assign values to the required properties of the transaction object, you can execute a CONNECT. After the CONNECT completes successfully, PowerBuilder automatically starts a SQL Server transaction. This is the start of a logical unit of work.

看看powerbuilder的帮助把
iamx 2006-11-24
  • 打赏
  • 举报
回复
准确地说, SetTransobject(SQLCA) 只是让数据窗口使用这个事务对象(不是事务 Transaction)。事务对象里有关于数据库连接的信息。Connect using SQLCA 和SetTransobject(SQLCA) 并不会启动一个事务 (Transaction)。

当 PB 向数据库发出第一条 Update, Insert 或 Delete 语句时,数据库自动产生一个事务 (Transaction)并锁定相关记录或表,一直到 PB 发出 Commit 或 Rollback 数据库才会结束事务并释放相关记录或表上的锁。因此,PB 向数据库发出 Select 语句并不会产生事务,除非在 Select 语句中显式地要求对记录或表加锁。

Disconnect 只是断开与数据库的连接,如果这里有还没结束的事务,事务将回滚。
yuanshujian 2006-11-24
  • 打赏
  • 举报
回复
AutoCommit = False;
这个属性是关键,如果指定了AutoCommit = False 代表SQLserver
为连接设置隐性事务模式。
相当在查询分析器执行了这个语句
SET IMPLICIT_TRANSACTIONS ON
(每个事物是在COMMIT /ROLLBACK 之后,开启新的事物)
否则 AutoCommit = True
SET IMPLICIT_TRANSACTIONS OFF
此模式为(执行SQL语句后,自动增加COMMIT)
必须显示开启事物(BEGIN TRAN )才算是事物开始
yangjianw2004 2006-11-23
  • 打赏
  • 举报
回复
settransobject(sqlca); 这个时候已经开始事务了
只是在commit时修改了数据库,rollback是操作的是数据窗口。
zzffhh 2006-11-23
  • 打赏
  • 举报
回复
嗯,我也是一楼这么觉得。
hjw01592 2006-11-23
  • 打赏
  • 举报
回复
程序执行到settransobject(sqlca)的时候,事务就已经产生了
leyueming 2006-11-23
  • 打赏
  • 举报
回复
没去想过这个问题
觉得还是一楼的吧
rightyeah 2006-11-23
  • 打赏
  • 举报
回复
一般认为第一个sql语句就是开始
jdsnhan 2006-11-23
  • 打赏
  • 举报
回复
settransobject(sqlca); 这个时候已经开始事务了。用户的检索,修改,删除,保存都是在这个事务下进行的。
lijun0701 2006-11-23
  • 打赏
  • 举报
回复
支持:
connect using sqlca;//这个时候就开始事务了

settransobject只是指定datawindow调用哪个事务

commit是指通过事务将修改提交给数据库
rollback是指将上次提交以后的数据回滚
另:
disconnect using transactionObject; //事务结束!
加载更多回复(4)

740

社区成员

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

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