我使用TClientDataSet
作为没有提供者概念的本地数据集。使用它之后,调用一个方法,该方法应使用StatusFilter
生成相应的SQL语句来解决更改(基本上生成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之后更新等等..但它应该更容易..
¿有人试图以优雅和直接的方式解决这个问题吗?我错过了什么?谢谢