18840.html
来自「VB技巧问答10000例,是一个教程」· HTML 代码 · 共 23 行
HTML
23 行
<html> <head> <title>Re: BeginTrans,CommitTrans是什么意思?</title> </head> <body bgcolor="#FFFFFF" vlink="#808080"> <center> <h1>Re: BeginTrans,CommitTrans是什么意思?</h1> </center><hr size=7 width=75%><hr size=7 width=75%><p>Posted by <a href="mailto:purewater@ms6.url.com.tw">矿泉水</a> on September 12, 1999 at 17:35:43:<p>In Reply to: <a href="18818.html">BeginTrans,CommitTrans是什么意思?</a> posted by kkcheung on September 11, 1999 at 17:46:29:<p>: 我常甩在程式中见到使用BeginTrans,CommitTrans.<br>: 它们有什么作用及意思,要一齐使用的吗?<p><br>::<br>CommitTrans 事件<br> <p>该事件是在 CommitTrans 方法完成之后发生。<p>语法<p>Private Sub object.CommitTrans( )<p>object 代表一个物件运算式,其值为「适用于」清单中的某个物件。<p>请注意<p>该事件是在 CommitTrans 方法执行后引发。开发者对该事件的回应可使其它的一些处理与该交易同步。<p>RollbackTrans 方法 (远端资料)<br> <p>下面的交易方法是用来管理在对话过程中正在处理的交易 (Transaction)。 <p>BeginTrans 开始一个新的交易。<p><br>CommitTrans 结束目前交易并储存所作的修改。<p><br>RollbackTrans 结束目前交易,并回复 rdoEnvironment 物件中的资料库到该目前交易开始时的状态。 <br>您可以对 rdoConnection 物件使用交易方法-但是在这种情况下,交易的范围只限于在 rdoConnection 下产生的 rdoResultset 和 rdoQuery 物件中。<p>语法<p>object.BeginTrans | CommitTrans | RollbackTrans<p>object 代表一个物件运算式,其值为「适用于」清单中的一个物件。<p>请注意<p>当您要在对话 (Session) 中对资料库所作的一系列改变当作是一个逻辑单位来处理时,您可以对 rdoEnvironment 或 rdoConnection 物件使用交易方法。也就是说,以动作集合为单位完成交易,或以一个集合为单位复原 (Roll Back) 。如此一来,如果集合中的任何动作失败,则整个交易也失败。交易还允许对资料库作暂时改变 - 该改变可用 RollbackTrans 方法取消。<p>一般说来,ODBC 驱动程式以下面两种模式工作: <p>自动交易认可模式 (Auto-commit Mode):当没有使用 BeginTrans 方法启动一个交易,每一个被执行的动作在完成时都立即认可在资料库中的交易。<p><br>手动交易认可模式 (Manual-commit Mode):当使用 BeginTrans 方法启动交易时,或使用 ODBC SQLSetStmtOption 函数关闭 SQL_AUTO_COMMIT 模式时,或传送一个 SQL 陈述式来启动交易 (BEGIN TRANS) 时,所有的动作都是交易中的一部份,并且在没有认可任何资料库的交易,直到使用 CommitTrans 方法为止。如果执行 CommitTrans,或使用 RollbackTrans 方法之前连接失败,就取消这个动作 - 复原 (Roll Back)。 <br>附注 当使用远端伺服器时,如果该伺服器像 Microsoft SQL Server 支援分散式的交易协调程式 (DTC),则您就可以初始化和控制跨越多个伺服器的交易。也就是说,如果您叫用一个远端伺服器上的远端程序呼叫 (Remote Procedure Call),则 DTC 可以保证该动作被包含在初始化的交易中。<p>一般来说,当您必须更新两个或多个资料表中的资料列时,并确保在所有的资料表中所作的改变都被完成 (交易认可)、或者不变 (复原) 时,您可以使用交易来维护资料的完整性。例如,当您将钱从一个帐户移至另一个帐户时,需要从帐户上减去一个数并加到另一个帐户上。如果其中有一个更新失败,帐户就不会平衡。在更新第一笔资料列前,先使用 BeginTrans 方法,然后,只要有任何更新失败,就可以使用 RollbackTrans 方法撤销所有的更新。在您成功地更新最后一笔资料列之后,就可使用 CommitTrans 方法。<p>注意 在一个 rdoEnvironment 物件内,对于该 rdoEnvironment 而言,交易总是总体的,它并不只局限于一个资料库,或一个结果集(Result Set)。如果在一个 rdoEnvironment 交易中、对多个资料库或结果集执行动作,则 RollbackTrans 方法会复原所有在资料库和结果集何上的动作。<p>一旦您使用 CommitTrans,就无法取消在该交易中所作的改变,除非该交易是另一个自行复原的交易的巢状部份。除了使用动作查询 (Action Query) 直接执行 SQL 交易管理陈述式外,则交易无法以巢状方式处理。如果想要平行处理重覆的、无巢状范围 (Non-Nested scope) 的交易,您可以另外产生包含平行交易 (Current transaction) 的 rdoEnvironment 物件。<p>附注 您可以使用包含交易陈述式的 SQL 动作查询。例如,对于 Microsoft SQL Server,可以使用 SQL 陈述式,如,BEGIN TRANSACTION, COMMIT TRANSACTION 或 ROLLBACK TRANSACTION。这项技术支援 ODBC 驱动程式所不支援的巢状交易。<p>如果您不储存或者复原任何暂停执行的交易,就关闭 rdoEnvironment 物件,则交易会自动复原。<p>如果不先使用 BeginTrans 方法就使用了 CommitTrans 或 RollbackTrans 方法,不会产生任何错误。<p>有些资料库不支援交易,在这些情况下,rdoConnection 物件或 rdoResultset 物件的 Transactions 属性为 False。为了保证资料库能支援交易,在使用 BeginTrans 方法之前,先检查 rdoConnection 物件的 Transactions 属性的值。如果对多个资料库使用 rdoResultset 物件,则先检查该 rdoResultset 物件的 Transactions 属性。如果 rdoConnection 或 rdoResultset 不支援交易,则这些方法将被忽略并且不会产生错误。<p><br><br><hr size=7 width=75%><p><a name="followups">Follow Ups:</a><br><ul><!--insert: 18840--></ul><!--end: 18840--><br><hr size=7 width=75%><p></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?