更新:2007 年 11 月
在事务处理期间,对数据源的更新是通过使用编辑缓冲区管理的,方法与在事务外部使用的方法相同。记录集的字段数据成员共同作为包含当前记录的编辑缓冲区。在 AddNew 或 Edit 期间,记录集暂时备份当前记录。在 Delete 操作期间,当前记录不备份在事务内。有关编辑缓冲区以及更新如何存储当前记录的更多信息,请参见 记录集:记录集如何更新记录 (ODBC)。
| .gif) 说明: | 
|---|
| 如果已实现批量取行,则不能调用 AddNew、Edit 或 Delete。必须写自己的函数来执行对数据源的更新。有关批量取行的更多信息,请参见记录集:批量获取记录 (ODBC)。 | 
在事务处理期间,不能提交或回滚 AddNew、Edit 和 Delete 操作。CommitTrans 和 Rollback 的影响可能会导致当前记录不能还原到编辑缓冲区中。若要确保当前记录正确还原,了解 CDatabase 的 CommitTrans 和 Rollback 成员函数如何处理 CRecordset 的更新函数是很重要的。
CommitTrans 如何影响更新
下表解释了 CommitTrans 对事务的影响。
CommitTrans 如何影响更新
| 操作 | 数据源的状态 | 
|---|---|
| AddNew 并 Update,然后 CommitTrans。 | 向数据源添加新记录。 | 
| AddNew(无 Update),然后 CommitTrans。 | 新记录丢失。记录不会被添加到数据源。 | 
| Edit 并 Update,然后 CommitTrans。 | 向数据源提交编辑。 | 
| Edit(无 Update),然后 CommitTrans | 对记录的编辑丢失。记录在数据源上保持不变。 | 
| Delete,然后 CommitTrans | 从数据源中删除记录。 | 
Rollback 如何影响事务
下表解释了 Rollback 对事务的影响。
Rollback 如何影响事务
| 操作 | 当前记录的状态 | 您还必须 | 数据源的状态 | 
|---|---|---|---|
| AddNew 并 Update,然后 Rollback | 暂时存储当前记录的内容,以便为新记录腾出空位。新记录输入到编辑缓冲区中。在调用 Update 之后,当前记录还原到编辑缓冲区中。 | 
 | 撤消由 Update 对数据源进行的添加。 | 
| AddNew(无 Update),然后 Rollback | 暂时存储当前记录的内容,以便为新记录腾出空位。编辑缓冲区包含新记录。 | 再次调用 AddNew 将编辑缓冲区还原到一个空的新记录。或调用 Move(0) 将旧值还原到编辑缓冲区中。 | 因为未调用 Update,不对数据源进行更改。 | 
| Edit 并 Update,然后 Rollback | 暂时存储当前记录的未编辑版本。对编辑缓冲区的内容进行编辑。在调用 Update 之后,仍然暂时存储记录的未编辑版本。 | Dynaset:滚过当前记录然后回滚,将记录的未编辑版本还原到编辑缓冲区中。 Snapshot:调用 Requery 从数据源刷新记录集。 | 撤消由 Update 对数据源进行的更改。 | 
| Edit(无 Update),然后 Rollback | 暂时存储当前记录的未编辑版本。对编辑缓冲区的内容进行编辑。 | 再次调用 Edit 将记录的未编辑版本还原到编辑缓冲区中。 | 因为未调用 Update,不对数据源进行更改。 | 
| Delete,然后 Rollback | 删除当前记录的内容。 | 调用 Requery 从数据源还原当前记录的内容。 | 撤消从数据源进行的数据删除。 |