2012-04-25 52 views
2

我有一个数据库表,我需要插入记录。 我正在使用可更新的TClientDataset,一切正常。添加可写虚拟字段到可更新TClientDataset

现在,我需要添加一个虚拟字段;不是一个计算的。 一个字段,我可以写行的状态(只是一些信息,我会在ApplyUpdates之前),但这不是数据库表的一部分。

我见过this illuminating post,但添加的字段是计算出来的,不可能更新和保存信息。 这对我来说并不好。

我试图从数据库中添加一个'dummy field'选择并修复ProviderFlags以删除pfUpdate。

cds.CommandText := 'SELECT 1 AS DUMMY , CUSTOMERS.* FROM CUSTOMERS'; 
cds.Open; 
cds.FieldByName('DUMMY').ProviderFlags := []; 

我在Provider.pas中看到,在构建insert sql之前,会检查ProviderFlags。这应该工作的确,问题是似乎ProviderFlags没有从我上面的声明更新。

请问,你知道如何在飞行中添加一个字段,这是可写的,但随后由delphi数据库更新过程忽略?

我使用delphi 7.

感谢您的帮助。

+2

是否有某些原因让你不能仅仅敲一些东西来保存对数据行和状态结构的引用。为你节省很多麻烦。 – 2012-04-25 09:52:29

+0

因为我没有状态的外部数据结构。我不想从数据集中创建它们。 Uwe Raabe提出的解决方案完全没有痛苦和混乱。 – Jako 2012-04-25 15:51:22

+0

这些对我来说都不是问题的原因,但@Uwe建议的方法看起来更不是问题。 – 2012-04-25 17:02:06

回答

6

使该领域的InternalCalc字段和设置其ProviderFlags[]。这使该字段可写入您的应用程序,但在更新基础数据库时跳过该字段。

+0

谢谢Uwe!而已!我已经实现了这一点,并像魅力一样工作。无论如何,我不需要设置ProviderFlags。使InternalCalc字段足够 – Jako 2012-04-26 07:47:37