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