2011-10-29 5 views
2

私は、dbgridとado-queriesを使用してMicrosoft Accessデータベースのテーブルを操作するプログラムを作成しています。納品結果からのフィールドの列を合計しますか?

プログラムは、ロイヤルティプログラムを持つビジネス向けに設計されており、メンバーは登録でき、購入は追跡する必要があります。これは、トランザクションを持つテーブルである:

enter image description here

は今、私が何をしたいのか、そのテーブルから特定の会員IDを選択しますADOクエリを実行され、その後、私はすべての「PointsAwarded」を追加したいから服従の結果。だから私は1人のメンバーが獲得したポイントの総額を得ることができます。

これは、私が何日も探していて役に立たなかったように、これを達成するのは非常に難しいと思われます。

ありがとうございました!

+0

この1つは[デルファイ]タグ付けされたのはなぜ? –

+2

TADOQueryを使用しているため:) – GolezTrol

答えて

2

何を探すべきか分かっていれば、それほど難しいことではありません。 :)

特定の列でグループ化し、集約の機能を他の列に使用できます。この場合、Iグループ一緒に各MEMBERIDのすべてのレコード受賞のポイントの合計を取得するには:

select 
    t.MemberId, 
    sum(t.PointsAwarded) as TotalPoints 
from 
    Transactions t 
group by 
    t.MemberId 
1

使用Golezの答えあなたはすべてのメンバーの合計PointsAwardedを取得したい場合。

あなたが特定のメンバーのためにPointAwardedをしたい場合は、あなたは、単にこれを行うことができます。

SELECT SUM(PointsAwarded) AS TotalPointsAwarded 
FROM Transactions 
WHERE MemberID = 3 

を上記の例では、あなたがパラメータ化したいと思う部材3

の合計を取得します変数をメンバーIDに渡すことができるようにする

Delphiのバージョンによってコンポーネントが異なるため、コンポーネントのParametersプロパティのドキュメントを参照してください。

はしかし、あなたはパラメータ化クエリをしたら、クエリを呼び出すときに、そして、あなたがこれを行う、MyADOQueryは、コンポーネントの名前です:

MyADOQuery.Active := False; 
MyADOQuery.Parameters.ParamByName('MemberID').Value := 3; 
MyADOQuery.Active := True; 
+0

あなたがここで示唆しているものと同じくらい単純なクエリの場合、そのような「アクティブ」状態を切り替える必要はないかもしれません。単にパラメータを新しい値に設定し、 'MyADOQuery.Requery;'を実行します。つまり、コンポーネントが現時点でアクティブであることがわかっている場合です。これが保証されていない場合、次のようなことがあります: 'If MyADOQuery.Active then MyADOQuery.Requery else MyADOQuery.Open;' –

関連する問題