TClientDataSet并使用StatusFilter处理记录

时间:2011-11-24 23:31:05

标签: delphi delphi-2010 tclientdataset

我使用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之后更新等等..但它应该更容易..

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

0 个答案:

没有答案