TClientDataSet并使用StatusFilter处理记录

pra*_*mer 7 delphi tclientdataset delphi-2010

我在TClientDataSet没有提供者概念的情况下使用a 作为本地数据集.在使用它之后,调用一个方法,该方法应该生成相应的SQL语句,使用它StatusFilter来解析更改(基本上生成SQL).

在阅读文档(设置StatusFilter to [dsInsert],处理所有插入SQL,设置StatusFilter to [dsModified]进程所有更新,删除相同)后,这看起来很容易,但经过几次测试后,现在看起来远非琐碎,例如:

如果我添加一条记录,则进行编辑:设置StatusFilter to [dsInserted]显示它,但使用原始数据.

如果我添加一条记录,然后编辑,然后将其删除:该记录StatusFilter set to [dsInserted] and [dsModified]也随之出现.

和其他类似的情况..

1)我知道如果我首先处理所有插入,那么所有更新然后所有删除数据库都将以正确的状态更新,但它看起来很不正确这种方法(生成无用的sql语句).

2)我试图访问PRecInfo(ClientDataSet.ActiveBuffer + ClientDataSet.RecordSize).Attribute信息(dsRecNew,dsRecOrg等),但仍无法解决逻辑问题.

3)我可以对逻辑进行编程以解决它,例如在处理和插入,设置StatusFilter to [dsDeleted]和定位之前,如果记录要查看其后是否删除了...与编辑相同,在插入之前,检查记录是否是更新之后所以在更新版本中插入sql等等..但它应该更容易..

¿有人试图以优雅和直接的方式解决这个问题吗?我错过了什么?谢谢