我用access2003 adp连接SQL,所以不好上传例子,这里说下情况
数据库 有 branch user product三个表 product通过pbranchid puserid 两个字段与branch 和user建立了关联。我设计了窗体用于修改、查询、添加 product的记录,由于部门和用户的名字分别在branch和user中,所以是涉及到对三个表的联合查询,窗体的select语句如下
SELECT dbo.product.productid, ..., dbo.branch.bname, ...,
FROM dbo.branch INNER JOIN
dbo.[user] ON dbo.branch.branchid = dbo.[user].ubranchid INNER JOIN
dbo.product ON dbo.[user].userid = dbo.product.puserid
ORDER BY dbo.product.pname, ....
窗体中设置了查询条件,用Filter过滤,如图
请问,如何对查询后得到的记录某字段进行合计,比如我每条产品记录中有成本这个字段,我想对该字段求和
用DSUM()的话,是不是又对表进行了一次查询过程,造成重复查询,浪费资源。ACCESS可以对查询后的结果直接求和吗?
——————————————————————————————————————————————————
另外我用DSUM做过,如下
...
If Not IsNull(Me.产品名称) Then
strWhere = strWhere & "([pname] like '%%" & Me.产品名称 & "%%') AND "
End If
If Not IsNull(Me.产品规格型号) Then
strWhere = strWhere & "([pstandard] like '%%" & Me.产品规格型号 & "%%') AND "
End If
If Not IsNull(Me.办事处名称) Then
strWhere = strWhere & "([bname] like '%%" & Me.办事处名称 & "%%') AND "
End If
If Not IsNull(Me.采购开始时间) Then
strWhere = strWhere & "([pdata] >= #" & Format(Me.采购开始时间, "yyyy-mm-dd") & "#) AND "
End If
If Not IsNull(Me.采购结束时间) Then
strWhere = strWhere & "([pdata] <= #" & Format(Me.采购结束时间, "yyyy-mm-dd") & "#) AND "
End If
If Len(strWhere) > 0 Then
strWhere = Left(strWhere, Len(strWhere) - 5)
End If
Debug.Print strWhere
Me.Filter = strWhere
Me.FilterOn = True
Label80.Caption = DSum("[pcost]", "product", Fiter) '求和
这样做第三、四、五条件是不能用的,该怎么改?主要是第三个条件涉及到branch表,不知道怎么改怎么写
不过我希望最好不用DSum,不重复查询
(pcost字段所用的文本框控件在窗体中我隐藏了,所以上面那张图里没有)
[此贴子已经被作者于2006-2-13 13:43:45编辑过]
|