簡體   English   中英

嘗試修改只讀DataSet字段

[英]Trying to modify read-only DataSet field

我使用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();

我收到錯誤:字段'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'場地價值?

  1. 將計算字段添加到數據集。
  2. 在此計算字段中計算Saldo的正確值(如果您願意,可以使用Saldo作為其來源)
  3. 在報告中顯示此計算字段,而不是Saldo字段。

編輯: 有關如何添加計算字段的示例,請參閱此處此處此處

--jeroen

正如ldsandon所說,你不能在計算時修改“Saldo”字段。 如果你需要在Id為“某事”時將值設置為零,那么最好在查詢中執行此操作。 最佳方法取決於將值設置為零的標准。

或者,將原始查詢的結果保存在臨時表中,然后在將結果返回到報表之前進行修改。

最后,您使用的報告工具是什么? 在渲染報告時,這可以改變“Saldo = 0”嗎?

考慮將結果存儲在ClientDataset中 - 如果可以肯定結果不是太大。

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

當我使用我選擇的數據庫(即Advantage數據庫服務器)執行相同(或類似)時,我會使用INTO子句,盡管它使用TSQLQuery組件(啟用了RequestLive屬性)。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM