设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2905|回复: 11
打印 上一主题 下一主题

[查询] [求助]如何在窗体中合计“查询所得到的记录集”某字段

[复制链接]
跳转到指定楼层
1#
发表于 2006-2-13 21:41:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我用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编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
12#
发表于 2006-2-16 21:34:00 | 只看该作者
用存储过程返回记录集和输出合计参数
11#
发表于 2006-2-15 20:44:00 | 只看该作者
在SQL中通配符是"%",日期和字段都用单引号标识。

不用dsum的话可以建一个存储过程(定义输出参数@p和输入参数@filter)。类似于

declar @sql as varchar

set @sql="select @p=sum(pcost) from product where"+ @filter

exec(@sql)
10#
 楼主| 发表于 2006-2-15 18:17:00 | 只看该作者
大家提点看法啊
9#
 楼主| 发表于 2006-2-15 01:27:00 | 只看该作者
顶上去[em01]
8#
 楼主| 发表于 2006-2-14 21:11:00 | 只看该作者
没有人能给点帮助吗?

[此贴子已经被作者于2006-2-14 17:26:09编辑过]

7#
 楼主| 发表于 2006-2-14 18:10:00 | 只看该作者
特别补充下,上面的日期查询单独调用本身没问题,只是Dsum中有问题
6#
 楼主| 发表于 2006-2-14 18:09:00 | 只看该作者
我看了刘小军最后一个例子,就是用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)


其他条件都没有问题,就是日期查询的时候就出问题
5#
发表于 2006-2-13 22:53:00 | 只看该作者
4#
 楼主| 发表于 2006-2-13 22:46:00 | 只看该作者
在我的例子中,我用sum只有在无条件查询的时候可以正确统计

文本框控件来源=sum([pprice])

一旦输入条件后查询,就显示错误

如果做成子窗体会不会还是这样的错误?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-3 03:29 , Processed in 0.199127 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表