2011-01-24 16 views
1

を変更しようとすると私はTADODataSetではは、SQL文で次のコマンドを実行使用6.0読み取り専用データセットフィールドを

C++ Builderを使用します。

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

私は唯一の報告のために、このデータセットを使用します。更新日をデータベースに戻す必要はありません。 私は、フィールド「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」フィールドの値を変更するにはどうすればよいですか?

+0

なぜあなたはそれを変更しようとしていますか?実際には、実際のフィールドではなくdbによって計算された値です。 –

+0

私は 'saldo'は実フィールドではないが、IDがあるときにクライアントがいくつかのレポートでこの値を変更する必要があることを理解しています。 – SelvirK

答えて

2
  1. は、あなたのデータセットに計算フィールドを追加します。
  2. Saldoフィールドの 代わりにレポートに表示
  3. (あなたがしたい 場合は それのソースとしてSaldoを使用することができます)この計算フィールドを、この計算フィールドでSaldo の正しい値を計算します。

編集: インスタンスhereを参照、計算フィールドを追加する方法の例についてはherehere

--jeroen

+0

Th。 データセットを開いたときに計算フィールドを追加するにはどうすればよいですか? – SelvirK

+0

@SelvirK:私の編集を参照してください。 –

1

ldsandonによると、「Saldo」フィールドは計算時には変更できません。 Idが「何か」であるときに値をゼロに設定する必要がある場合は、クエリでそれを行う方がよいでしょう。最適なアプローチは、値をゼロに設定する基準に依存します。

または、元のクエリの結果を一時テーブルに保存してから、結果をレポートに戻す前に変更します。

最後に、どのレポートツールを使用していますか?レポートをレンダリングするときに "Saldo = 0"の変更を行うことはできますか?

+0

クエリ結果(レポート)がグリッドで表示されます。 Saldo = 0は単純な例です。実際のレポートは非​​常に複雑で、15-20の計算フィールドと計算フィールドが変更される非常に複雑なロジックがあり、このロジックはユーザー入力によって異なります。 レンダリングレポートまたはSQLステートメントではこれを行うことはできません。 – SelvirK

+0

この場合、クエリの結果を変更して必要な変更を値に適用できるデータ構造にロードしないのはなぜですか? – Tony

1

結果をClientDataSetに格納することを検討してください。結果が大きすぎないことが保証されている場合は、以下が適用されない場合がありますので、私は「TADODataSetでは」を使用していない

:)...

私が行うときに選択の私のDBを使用して)同じ(または類似(すなわちアドバンテージデータベースサーバーは)私が使用しますTSQLQueryコンポーネント(RequestLiveプロパティを有効にした状態)でINTO句を使用します。たとえば:

SELECT ID、SUM(Saldo)Saldo INTO #TempTable AS表GROUP BY IDから、

関連する問題