QDataSet 提供了一个 MarkStatus 函数,它的作用是将指定的记录标记为特定的状态(新增、删除、未变更)。它可以在与 Provider 相连时,直接标记记录的状态,并提交结果到相应的数据库中。比如,我们将一个数据集所有的记录标记为 usInserted ,然后调用 ApplyChanges 将数据集所有的记录插入到目标数据库中的特定表中。
我们来看它的函数声明:
/// <summary> 标记记录的状态为新状态 </summary> /// <param name="ANewStatus"> 新状态 </summary> /// <param name="ApplyToAll"> 是否应用到所有的记录,如果为False,则只修改当前记录</param> procedure MarkStatus(ANewStatus: TUpdateStatus; ApplyToAll: Boolean = True);
我们简单说明下它的参数:
- ANewStatus 是一个 TUpdateStatus 类型的参数,除非当前记录的状态是 usModified ,否则设置 ANewStatus 参数为 usModified 会抛出异常;如果 ANewStatus 的值为 usUnmodified,则会合并记录的新值为原始值,并将记录标记为 usUnmodified,如果 ANewStatus 的值为 usInserted,则会合并记录的原始值为新值,并将记录状态标记为 usInserted,而如果 ANewStatus 的值为 usDeleted ,则会将记录删除并将变更的记录的标记为 usDeleted
- ApplyToAll 参数决定了标记面向全部记录,还是只标记当前记录。
关于 MarkStatus 的用法示例,可以参考 Demos\Delphi\VCL\QDB\Copy 示例中的代码。