事务:事务如何影响更新 (ODBC)

更新数据源是在事务期间通过使用编辑缓冲区来管理的(事务外部使用的相同方法)。 记录集的字段数据成员统称为包含当前记录的编辑缓冲区,记录集在 AddNewEdit 期间临时备份。 在 Delete 操作期间,当前记录不会在事务中备份。 有关编辑缓冲区以及如何存储当前记录的详细信息,请参阅 Recordset:记录集如何更新记录 (ODBC)

注意

如果已实现批量行提取,则无法调用 AddNewEditDelete。 必须改为编写自己的函数以对数据源执行更新。 有关批量行提取的详细信息,请参阅记录集:批量提取记录 (ODBC)

在事务期间,可以提交或回滚 AddNewEditDelete 操作。 CommitTransRollback 的效果可能导致当前记录不还原到编辑缓冲区。 若要确保正确还原当前记录,请务必了解如何将 CDatabaseCommitTransRollback 成员函数与 CRecordset 的更新函数配合使用。

CommitTrans 如何影响更新

下表说明了 CommitTrans 对事务的影响。

CommitTrans 如何影响更新

Operation 数据源的状态
AddNewUpdate,然后 CommitTrans 新记录将添加到数据源。
AddNew(在没有 Update 的情况下),然后 CommitTrans 新记录丢失。 记录未添加到数据源。
EditUpdate,然后 CommitTrans 已提交到数据源的编辑。
Edit(在没有 Update 的情况下),然后 CommitTrans 对记录的编辑将丢失。 数据源上的记录保持不变。
Delete 然后 CommitTrans 从数据源中删除的记录。

回滚如何影响事务

下表说明了 Rollback 对事务的影响。

回滚如何影响事务

Operation 当前记录的状态 你还必须 数据源的状态
AddNewUpdate,然后 Rollback 当前记录的内容将临时存储,以便为新记录腾出空间。 新记录将输入到编辑缓冲区中。 调用 Update 后,当前记录将还原到编辑缓冲区。 Update 对数据源所做的添加将相反。
AddNew(在没有 Update 的情况下),然后 Rollback 当前记录的内容将临时存储,以便为新记录腾出空间。 编辑缓冲区包含新记录。 再次调用 AddNew 以将编辑缓冲区还原到空的新记录。 或者调用 Move (0),将旧值还原到编辑缓冲区。 由于 Update 未调用,因此没有对数据源进行更改。
EditUpdate,然后 Rollback 临时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。 调用 Update 后,记录的未编辑版本仍暂时存储。 动态集:向下滚动当前记录,然后返回以将记录的未编辑版本还原到编辑缓冲区。

快照:调用 Requery 以从数据源刷新记录集。
Update 对数据源所做的更改将相反。
Edit(在没有 Update 的情况下),然后 Rollback 临时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。 再次调用 Edit 以将记录的未编辑版本还原到编辑缓冲区。 由于 Update 未调用,因此没有对数据源进行更改。
Delete 然后 Rollback 删除当前记录的内容。 调用 Requery 以从数据源还原当前记录的内容。 从数据源中删除数据将相反。

另请参阅

事务 (ODBC)
事务:在记录集中执行事务 (ODBC)
CDatabase 类
CRecordset 类