在事务处理期间,对数据源的更新是通过使用编辑缓冲区管理的,方法与在事务外部使用的方法相同。 记录集的字段数据成员共同作为包含当前记录的编辑缓冲区。在 AddNewEdit 期间,记录集暂时备份当前记录。 在 Delete 操作期间,当前记录不备份在事务内。 有关编辑缓冲区以及更新如何存储当前记录的更多信息,请参见 记录集:记录集如何更新记录 (ODBC)

备注

如果已实现批量取行,则不能调用 AddNewEditDelete。必须写自己的函数来执行对数据源的更新。有关批量取行的更多信息,请参见记录集:批量获取记录 (ODBC)

在事务处理期间,不能提交或回滚 AddNewEditDelete 操作。 CommitTransRollback 的影响可能会导致当前记录不能还原到编辑缓冲区中。 若要确保当前记录正确还原,了解 CDatabaseCommitTransRollback 成员函数如何处理 CRecordset 的更新函数是很重要的。

CommitTrans 如何影响更新

下表解释了 CommitTrans 对事务的影响。

CommitTrans 如何影响更新

操作

数据源的状态

AddNewUpdate,然后 CommitTrans

向数据源添加新记录。

AddNew(无 Update),然后 CommitTrans

新记录丢失。 记录不会被添加到数据源。

EditUpdate,然后 CommitTrans

向数据源提交编辑。

Edit(无 Update),然后 CommitTrans

对记录的编辑丢失。 记录在数据源上保持不变。

Delete,然后 CommitTrans

从数据源中删除记录。

Rollback 如何影响事务

下表解释了 Rollback 对事务的影响。

Rollback 如何影响事务

操作

当前记录的状态

您还必须

数据源的状态

AddNewUpdate,然后 Rollback

暂时存储当前记录的内容,以便为新记录腾出空位。 新记录输入到编辑缓冲区中。 在调用 Update 之后,当前记录还原到编辑缓冲区中。

 

撤消由 Update 对数据源进行的添加。

AddNew(无 Update),然后 Rollback

暂时存储当前记录的内容,以便为新记录腾出空位。 编辑缓冲区包含新记录。

再次调用 AddNew 将编辑缓冲区还原到一个空的新记录。 或调用 Move(0) 将旧值还原到编辑缓冲区中。

因为未调用 Update,不对数据源进行更改。

EditUpdate,然后 Rollback

暂时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。 在调用 Update 之后,仍然暂时存储记录的未编辑版本。

Dynaset:滚过当前记录然后回滚,将记录的未编辑版本还原到编辑缓冲区中。

Snapshot:调用 Requery 从数据源刷新记录集。

撤消由 Update 对数据源进行的更改。

Edit(无 Update),然后 Rollback

暂时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。

再次调用 Edit 将记录的未编辑版本还原到编辑缓冲区中。

因为未调用 Update,不对数据源进行更改。

Delete,然后 Rollback

删除当前记录的内容。

调用 Requery 从数据源还原当前记录的内容。

撤消从数据源进行的数据删除。

请参见

参考

CDatabase 类

CRecordset 类

概念

事务 (ODBC)

事务 (ODBC)

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