Office中国论坛/Access中国论坛
标题: [求助]如何在窗体中合计“查询所得到的记录集”某字段 [打印本页]
作者: ifireac 时间: 2006-2-13 21:41
标题: [求助]如何在窗体中合计“查询所得到的记录集”某字段
我用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过滤,如图
[attach]15794[/attach]
请问,如何对查询后得到的记录某字段进行合计,比如我每条产品记录中有成本这个字段,我想对该字段求和
用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编辑过]
作者: 一点通 时间: 2006-2-13 22:09
可以子窗体的页脚中用SUM统计,在主窗体调用这个数据
作者: ifireac 时间: 2006-2-13 22:38
我没有用子窗体
如果要用,该怎么用?
把查询结果做成子窗体?
作者: ifireac 时间: 2006-2-13 22:46
在我的例子中,我用sum只有在无条件查询的时候可以正确统计
文本框控件来源=sum([pprice])
一旦输入条件后查询,就显示错误
如果做成子窗体会不会还是这样的错误?
作者: 一点通 时间: 2006-2-13 22:53
可参考一下刘小军的例子
http://www.office-cn.net/forum.php?mod=viewthread&tid=9226
作者: ifireac 时间: 2006-2-14 18:09
我看了刘小军最后一个例子,就是用Dsum做的,不过为什么我做的Dsum会在用日期条件时抱错
我想应该是access,sql查询参数写法的不同造成的,该怎么修改。(刘小军用的是MDB,我用的是ADP)
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
...
Label80.Caption = DSum("[pcost]", "product", strWhere)
其他条件都没有问题,就是日期查询的时候就出问题
作者: ifireac 时间: 2006-2-14 18:10
特别补充下,上面的日期查询单独调用本身没问题,只是Dsum中有问题
作者: ifireac 时间: 2006-2-14 21:11
没有人能给点帮助吗?
[此贴子已经被作者于2006-2-14 17:26:09编辑过]
作者: ifireac 时间: 2006-2-15 01:27
顶上去[em01]
作者: ifireac 时间: 2006-2-15 18:17
大家提点看法啊
作者: wuaza 时间: 2006-2-15 20:44
在SQL中通配符是"%",日期和字段都用单引号标识。
不用dsum的话可以建一个存储过程(定义输出参数@p和输入参数@filter)。类似于
declar @sql as varchar
set @sql="select @p=sum(pcost) from product where"+ @filter
exec(@sql)
作者: 徐阿鹏 时间: 2006-2-16 21:34
用存储过程返回记录集和输出合计参数
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |