2011-10-29 36 views
2

好吧,我正在创建一个程序,它使用dbgrid和ado-queries来处理Microsoft Access数据库中的表。从ado-query结果中总结一列字段?

该计划是专为具有忠诚度计划的业务,会员可以注册,并且必须跟踪购买。这是与交易表:

enter image description here

现在我想要做的就是运行一个ADO查询,将选择从该表中的某个成员的ID,然后我要添加所有的“PointsAwarded”从这是造成这种情况的原因。所以我可以得到一个成员赢得的积分总数。

看来这很难完成,因为我一直在寻找几天,并没有发现任何有用的东西。

Thanx的任何帮助!

+0

? –

+2

因为它使用TADOQuery? :) – GolezTrol

回答

2

这并不难,如果你知道要寻找什么。 :)

您可以按某些列组合,然后在其他列上使用聚合函数。如果你想获得总PointsAwarded所有成员

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

使用Golez的答案:在这种情况下,我组的每个成员Id所有记录来获得奖励积分的总和。

如果你想PointAwarded特定成员,那么你可以简单地这样做:

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

上面的例子可以让你的总的部件3

你要的参数查询,以便您可以将您的变量传递给成员标识。

您需要阅读组件的Parameters属性的文档,因为它在Delphi版本中有所不同。

然而,一旦你已经参数查询,然后当你打电话查询,你这样做,其中MyADOQuery是组件的名称:为什么这样一个标记[德尔福]

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

如果查询与您在此处建议的查询一样简单,那么可能不需要切换“活动”状态。只需将该参数设置为新值并执行MyADOQuery.Requery;。这就是说,如果知道组件此刻处于活动状态。如果不能保证,那么类似这样的事情可能会做到:'如果MyADOQuery.Active然后MyADOQuery.Requery else MyADOQuery.Open;'。 –