所有的数据集类组件都是从TMemDataSet继承下来的,该组件实现了内存中对数据的管理,其主要的属性、方法和事件如下。
1.数据更新
名称 | 类型 | 说明 |
CachedUpdates | Boolean | 数据集是否采用缓冲模式 |
ApplyUpdates |
| 将缓冲区中未提交的数据提交数据库,但不执行数据库的事务操作。此时缓冲区数据仍然存在,UpdateStatus状态处于修改状态,需要调用CommitUpdates来清除缓存中的数据,并将状态还原成非修改状态。ApplyUpdates没有放在Try Exception块中,如果有数据更新失败,将触发异常信息提示,如果在OnUpdateError中没有将UpdateAction设置为uaAbort将再次触发错误信息提示。 |
CancelUpdates |
| 放弃对缓冲区中未提交数据的变动,恢复原来的状态 |
RestoreUpdates |
| 将数据集中所有缓冲区数据恢复到调用ApplyUpdates之前的更新状态,一版用于更新失败时使用 |
CommitUpdates |
| 清除缓冲区的未提交数据,但是通过OnUpdateRecord或OnUpdateError事件跳过的修改内容不会被清除 |
UpdatesPending | Boolean | 判断缓冲区是否存在未提交的数据,True表示存在 |
UpdateStatus | TUpdateStatus | 返回数据集在当前记录下的更新状态。 |
UpdateResult | TUpdateAction | 返回数据集调用ApplyUpdates方法后在该记录的执行状态 |
UpdateRecordTypes |
| 在缓冲模式下返回当前记录的更新模式 |
LocalUpdate | Boolean | 是否本地更新,如果是True则将阻止数据集自动将数据更新提交服务器,而是缓冲在本地内存中。 |
DeferredPost |
| 与Post不同的是,DeferredPost将已经完成的修改提交数据库永久保存,同时数据集状态仍然停留在编辑或新增状态(dsEdit, dsInsert),调用Cancel函数并不能取消已经提交数据库的修改内容,使用上需慎重 |
RevertRecord |
| 在缓冲模式下,撤销对当前记录的数据更新内容 |
OnUpdateRecord |
| 在更新某条记录时触发,如果是在缓冲模式下,则事件在ApplyUpdates之后触发。事件的UpdateAction缺省为uaFail,如果代码操作成功则需要设置为uaApplied。其取值如下: uaFail 触发失败异常信息 uaAbort 中断后续更新并回滚 uaSkip 跳过,但不报错 uaRetry 重新尝试,很容易形成死循环 uaApplied 代码已经处理,ODAC不再自动处理 需要注意ODAC的OnUpdateRecord事件与系统自带TDataSetProvider的OnUpdateRecord事件略有不同,ODAC的该事件一旦编写了代码,数据集就将数据更新的权利交给了代码,不再自动更新数据。 |
OnUpdateError |
| 当数据更新发生错误时触发,如果是在缓冲模式下,则事件在ApplyUpdates之后触发。事件的UpdateAction缺省为uaFail,通过访问事件参数DataSet的各个字段TField.OldValue和TField.NewValue获取原值和新值,设置事件的UpdateAction为uaRetry可以重新尝试更新。ApplyUpdates没有放在Try Exception块中,将触发异常信息提示,如果在OnUpdateError中没有将UpdateAction设置为uaAbort将再次触发错误信息提示。 |