ODAC中事务处理(自动提交模式)
使用AutoCommit属性,可以在不显式调用Commit或Rollback方法的情况下,启动隐式事务(自动提交)。
将AutoCommit设置为True时,在每次数据库访问后隐式调用Commit方法。
TOraSesion中的AutoCommit属性指定连接当前Session的数据控件是否隐式提交。默认值为True。
继承自TCustomDADataSet和TCustomDASQL类的组件(OraQuery 、TOraSQL、TOraStoredProc等)都有AutoCommit属性,可以指定其隐式事务,默认值为True。
property AutoCommit: boolean; //自动提交
备注
1.TOraSession中的AutoCommit属性和连接当前Session的数据控件的AutoCommit属性都为True时,才能隐式提交。
2.启动隐式事务相当于在写的SQL语句后加了Commit;(如果在语句中已经写了Commit;或Rollback;隐式事务可以忽略)
3.连接同一TOraSession的多个数据控件,如果有AutoCommit := True和AutoCommit := False的,AutoCommit := True的执行后,相当于执行TOraSession.Commit;,可能会影响会导致AutoCommit := False也提交
OraSQL.Session := OraSession; OraSession.AutoCommit := True; OraSQL.AutoCommit := False; OraSQL.SQL := 'DELETE FROM Dept'; OraSQL.Execute; // 删除所有记录,不执行提交 OraSession.Rollback;// 恢复已删除的记录 OraSession.AutoCommit := False; OraSQL.AutoCommit := True; OraSQL.SQL := 'DELETE FROM Dept'; OraSQL.Execute; // 删除所有记录,不执行提交 OraSession.Rollback; // 恢复已删除的记录 OraSession.AutoCommit := True; OraSQL.AutoCommit := True; OraSQL.SQL := 'DELETE FROM Dept'; OraSQL.Execute; // 删除所有记录,执行提交 OraSession.Rollback; // 无法还原已删除的记录
OraSQL1.Session := OraSession; OraSQL2.Session := OraSession; OraSession.AutoCommit := True; OraSQL1.AutoCommit := False; OraSQL2.AutoCommit := True; OraSQL1.SQL := 'DELETE FROM Dept WHERE DeptNo = 1'; OraSQL1.Execute; // 删除DeptNo = 1记录,不执行提交 OraSQL2.SQL := 'DELETE FROM Dept WHERE DeptNo = 2'; OraSQL2.Execute; // 删除DeptNo = 2记录,执行提交 //相当于隐式执行OraSession.Commit; OraSession.Rollback;// 无法恢复DeptNo = 1和DeptNo = 2的记录