尝试修改只读DataSet字段

时间:2011-01-24 11:47:23

标签: c++ ado c++builder

我使用C ++ Builder 6.0

我使用TADODataSet执行以下SQL语句:

SELECT Id, SUM(Saldo) AS Saldo 
FROM Table 
GROUP BY Id

我仅将此DataSet用于报告。无需将更新日期更新回数据库。 当我尝试修改字段“Saldo”

adospCard->Edit();
adospCard->FieldByName("Saldo")->AsFloat=0.0;
adospCard->Post();

我收到错误: Field'Saldo'无法修改。 我添加了这一行

adospCard->FieldByName("Saldo")->ReadOnly=false;

并且错误不再发生,但字段'Saldo'没有改变。

adospCard->Edit();
//adospCard->FieldByName("Saldo")->AsFloat=1536.5
adospCard->FieldByName("Saldo")->AsFloat=0.0;
//adospCard->FieldByName("Saldo")->AsFloat=0
adospCard->Post();
//adospCard->FieldByName("Saldo")->AsFloat=1536.5

如何改变'Saldo'字段值?

3 个答案:

答案 0 :(得分:2)

  1. 将计算字段添加到数据集中。
  2. 计算Saldo的正确值 在这个计算字段中(你可以 如果你使用Saldo作为它的来源 想要)
  3. 在报告中显示此计算字段 而不是萨尔多场。
  4. 修改 有关如何添加计算字段的示例,请参阅例如hereherehere

    - 的Jeroen

答案 1 :(得分:1)

正如ldsandon所说,你无法修改计算出来的“Saldo”字段。 如果你需要在Id为“某事”时将值设置为零,那么最好在查询中执行此操作。最佳方法取决于将值设置为零的标准。

或者,将原始查询的结果保存在临时表中,然后在将结果返回到报告之前对其进行修改。

最后,您使用的报告工具是什么?渲染报告时,这可以改变“Saldo = 0”吗?

答案 2 :(得分:1)

考虑将结果存储在ClientDataset中 - 如果可以肯定结果不是太大。

我不使用“TADODataSet”,因此以下内容可能不适用:)...

当我使用我选择的数据库(即Advantage数据库服务器)执行相同(或类似)时,我会使用INTO子句,尽管它使用TSQLQuery组件(启用了RequestLive属性)。例如:

SELECT Id,SUM(Saldo)AS Saldo INTO #TempTable FROM Table GROUP BY Id