hur.cn - 华软网

 热门搜索

关于PB事务的问题

  作者:未知    来源:网络    更新时间:2019/4/16
PB那么久了,一直很迷惑:咱们在控制PB事务的时通常为显示地提交或回滚事务作为事务结束的标志,那么咱们是在什么时候起头事务的呢?如果有个界面是在用户检索数据后举行修改后保存的。是在数据窗口检索数据的时候?照旧在保存前启用的事务呢?
------华软网友回答------
settransobject(sqlca); 这个时候已经起头事务了。用户的检索,修改,删除,保存都是在这个事务下举行的。
------华软网友回复------
一般以为第一个sql语句就是起头

------华软网友回复------
没去想过这个问题
觉得照旧一楼的吧
------华软网友回复------
程序执行到settransobject(sqlca)的时候,事务就已经产生了
------华软网友回复------
嗯,我也是一楼这么觉得。
------华软网友回复------
settransobject(sqlca); 这个时候已经起头事务了
只是在commit时修改了数据库,rollback是操作的是数据窗口

------华软网友回复------
起头是connect的时候
中间以commit;rollback分割
------华软网友回复------
开什么玩笑

SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = ...
SQLCA.ServerName = ...
SQLCA.LogId = ...
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
connect using sqlca;//这个时候就起头事务了

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

commit是指通过事务将修改提交给数据库
rollback是指将上次提交以后的数据回滚
------华软网友回复------
支持楼上
------华软网友回复------
connect 时起头的事务,settransobject是为数据窗口指定事务而已,究竟PB编程不单单是针对数据窗口
------华软网友回复------
支持:
connect using sqlca;//这个时候就起头事务了

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

commit是指通过事务将修改提交给数据库
rollback是指将上次提交以后的数据回滚
另:
disconnect using transactionObject;  //事务结束!
------华软网友回复------
准确地说, SetTransobject(SQLCA) 只是让数据窗口运用这个事务对象(不是事务 Transaction)。事务对象里有关于数据库连接的信息。Connect using SQLCA 和SetTransobject(SQLCA) 其实不会启用一个事务 (Transaction)。

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

Disconnect 只是断开与数据库的连接,如果这里有还没结束的事务,事务将回滚。
------华软网友回复------
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的帮助把
------华软网友回复------
AutoCommit = False;
这个属性是关头,如果指定了AutoCommit = False 代表SQLserver
为连接设置隐性事务模式。
相当在查询分析器执行了这个语句
SET IMPLICIT_TRANSACTIONS ON
(每一个事物是在COMMIT /ROLLBACK 之后,开启新的事物)
否则 AutoCommit  = True 
SET IMPLICIT_TRANSACTIONS OFF
此模式为(执行SQL语句后,自动增加COMMIT)
必需显示开启事物(BEGIN TRAN )才算是事物起头
------华软网友回复------
个人以为定义事务的时候事务已经起头,只是没有执行而已,
settransobject(transaction)只是将datawindow与事务联系关系!
------华软网友回复------
自己想法

tansaction xx   定义事务(不起头事务)

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

运用事务时,事务对象检查事务的层数,如果没有起头事务则起头事务(begin tran),     然后保存事务点(save tran xx),执行语句,语句执行失利时回滚到保存点(这样不会影响其它语句的执行结果),成功不措置惩罚.

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

也就是说,执行语句时若事务未起头则起头一个新事务,保存当前事务,执行语句,语句执行失利,回滚到保存点(只回滚当前的操作,不影响以前的数据).提交事务或撤消事务来结束该事务,持续重复这个措置惩罚进程.




------华软网友回复------
赞成楼上的,
1.update(包括dw,ds的)/insert/delete 起头
2.commit/rollback举行提交或回滚
如果在1执行后没有执行2,有可能会锁住数据库,形成死锁
------华软网友回复------
汗!!!一直以为自己了解PB的事务特征,到今天才发现自己照旧错了。

PB 帮助中 Connect 条目中对事务有对照详细的说明。大家能够打开帮助,选 Index 标签页,输入 Connect 就能够了。
------华软网友回复------
SQLCA.AutoCommit = TRUE时,
我以为在PowerScript中Insert、Update、Delete语句都将建立一个事物,并在语句运行结束后自动Commit提交。这个时候代码里写Commit或RollBack语句将没有所有作用。而数据窗口的增、删、改能够看做是一条SQL语句。

SQLCA.AutoCommit = False时,
观点认同 MakeToday(改变)
------华软网友回复------
赞成 liubocy(天道酬勤)
------华软网友回复------
自己以为:建立连接事务起头,之后的事物起头是commit之后
------华软网友回复------
多事务?第一次与数据库尝试连接成功,就应该是第一个事务的起头,以后若再不创建新的事务,整个对数据库的操作,都是应该运用这一个事务来完成的!
------华软网友回复------
迷茫!!
------华软网友回复------
不用争了,当然是Connect;时起头事务的!!!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。