事务:事务如何影响更新 (ODBC)
更新数据源是在事务期间通过使用编辑缓冲区来管理的(事务外部使用的相同方法)。 记录集的字段数据成员统称为包含当前记录的编辑缓冲区,记录集在 AddNew
或 Edit
期间临时备份。 在 Delete
操作期间,当前记录不会在事务中备份。 有关编辑缓冲区以及如何存储当前记录的详细信息,请参阅 Recordset:记录集如何更新记录 (ODBC)。
注意
如果已实现批量行提取,则无法调用 AddNew
、Edit
或Delete
。 必须改为编写自己的函数以对数据源执行更新。 有关批量行提取的详细信息,请参阅记录集:批量提取记录 (ODBC)。
在事务期间,可以提交或回滚 AddNew
、Edit
和 Delete
操作。 CommitTrans
和 Rollback
的效果可能导致当前记录不还原到编辑缓冲区。 若要确保正确还原当前记录,请务必了解如何将 CDatabase
的 CommitTrans
和 Rollback
成员函数与 CRecordset
的更新函数配合使用。
CommitTrans 如何影响更新
下表说明了 CommitTrans
对事务的影响。
CommitTrans 如何影响更新
Operation | 数据源的状态 |
---|---|
AddNew 和 Update ,然后 CommitTrans |
新记录将添加到数据源。 |
AddNew (在没有 Update 的情况下),然后 CommitTrans |
新记录丢失。 记录未添加到数据源。 |
Edit 和 Update ,然后 CommitTrans |
已提交到数据源的编辑。 |
Edit (在没有 Update 的情况下),然后 CommitTrans |
对记录的编辑将丢失。 数据源上的记录保持不变。 |
Delete 然后 CommitTrans |
从数据源中删除的记录。 |
回滚如何影响事务
下表说明了 Rollback
对事务的影响。
回滚如何影响事务
Operation | 当前记录的状态 | 你还必须 | 数据源的状态 |
---|---|---|---|
AddNew 和 Update ,然后 Rollback |
当前记录的内容将临时存储,以便为新记录腾出空间。 新记录将输入到编辑缓冲区中。 调用 Update 后,当前记录将还原到编辑缓冲区。 |
Update 对数据源所做的添加将相反。 |
|
AddNew (在没有 Update 的情况下),然后 Rollback |
当前记录的内容将临时存储,以便为新记录腾出空间。 编辑缓冲区包含新记录。 | 再次调用 AddNew 以将编辑缓冲区还原到空的新记录。 或者调用 Move (0),将旧值还原到编辑缓冲区。 |
由于 Update 未调用,因此没有对数据源进行更改。 |
Edit 和 Update ,然后 Rollback |
临时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。 调用 Update 后,记录的未编辑版本仍暂时存储。 |
动态集:向下滚动当前记录,然后返回以将记录的未编辑版本还原到编辑缓冲区。 快照:调用 Requery 以从数据源刷新记录集。 |
Update 对数据源所做的更改将相反。 |
Edit (在没有 Update 的情况下),然后 Rollback |
临时存储当前记录的未编辑版本。 对编辑缓冲区的内容进行编辑。 | 再次调用 Edit 以将记录的未编辑版本还原到编辑缓冲区。 |
由于 Update 未调用,因此没有对数据源进行更改。 |
Delete 然后 Rollback |
删除当前记录的内容。 | 调用 Requery 以从数据源还原当前记录的内容。 |
从数据源中删除数据将相反。 |