Office中国论坛/Access中国论坛

标题: “水火相容”——分分合合的查询 [打印本页]

作者: roych    时间: 2015-5-23 15:46
标题: “水火相容”——分分合合的查询
本帖最后由 roych 于 2015-8-25 11:20 编辑

        俗话说,“水火不相容”。但是初中的物理老师用实验告诉我们,这句话不太准确。实验很简单,把玻璃杯作为烛台,先在杯子内点上一支蜡烛,然后缓缓灌上一些水,略低于蜡烛的高度。这时候随着蜡烛的燃烧,慢慢就可以看到“水火相容”的景象了。原理很简单。蜡烛外部因为由于水的散热,没法达到熔点,所以是不会被燃烧的,而内部则会燃烧,从而形成这个现象。
        在Access的查询中,记录明细是分,记录汇总是合,一般情况下,两者是分开的,就像水跟火一样。因此,我们通常的做法是将汇总的数据通过控件展示在窗体就可以了,明细则以子窗体的形式展示。当然,也可以都导出Excel来查看。
        当然,这只是“一般情况下”,如果非要水火相容呢,能不能办到呢?a30088就提到了这么一个问题:求教,关于一个子窗体查询问题

       答案是:“可以”。这问题具有一定的通用性,因此在这里做成一个例子(2003格式有点怪怪的{:soso_e120:}),供版友们使用(估计仓管或者采购岗位用得多一些)。效果图如下:
[attach]56378[/attach]
       值得一提的是,日期字段还是不要改,否则用比较计算符(>、<、=等等)来处理查询时容易出错。——我这里是在联合查询里再用format函数处理成文本的。
*****************************************************
2015-5-25更新:应a30088的要求,加上报表显示[attach]56395[/attach]
2015-5-29更新:
http://www.office-cn.net/thread-119943-4-1.html




作者: tmtony    时间: 2015-5-23 15:49
自从有了老汉和Roych  ,Access从此不太枯燥{:soso_e113:}
作者: purplerose    时间: 2015-5-23 16:21
谢谢Roych!解压后有两个版本的数据库,我是2003,打开后感觉挺好的 ,进销存都可以来引用,就像王站老师说的,有和你 ACCESS会更精彩!{:soso_e100:}
作者: zhuyiwen    时间: 2015-5-23 16:26
呵呵
作者: roych    时间: 2015-5-23 16:43
tmtony 发表于 2015-5-23 15:49
自从有了老汉和Roych  ,Access从此不太枯燥

谢谢站长夸奖
作者: 风中漫步    时间: 2015-5-23 16:47
咋容的?木图啊
作者: 风中漫步    时间: 2015-5-23 17:12
谢谢!
是完全通过查询解决的?能否展示下sql
作者: a30088    时间: 2015-5-24 15:07
谢谢了,看看是不是我所要的,不管怎样还是多谢roych先,谢谢!如有不明再请教.
作者: a30088    时间: 2015-5-24 15:44
请教一下roych,如果再将查询出来的结果打印到报表上,如何设置报表数据源呢?谢谢!如下:
作者: a30088    时间: 2015-5-24 17:20
按照roych做的,已经可以实现,这里先谢谢roych先,但打印到报表就会出借,请看下.
作者: a30088    时间: 2015-5-24 17:23
打印代码如下:
DoCmd.OpenReport "应收款对账表", acViewPreview, , "客户='" & 客户 & "'"
数据源来源查询
作者: a30088    时间: 2015-5-24 18:45
用这样的代码执行是这样的结果,不是我要的结果
Private Sub btnprint_Click()
DoCmd.OpenReport "应收款对账表", acViewPreview, , "客户='" & 客户 & "'"
DoCmd.OpenReport "应收款对账表", acViewPreview
PrintReport "应收款对账表"

End Sub
如图:

作者: a30088    时间: 2015-5-24 18:47
代码执行是这样的结果,也不是我要的结果
Private Sub btnprint_Click()
DoCmd.OpenReport "应收款对账表", acViewPreview
DoCmd.OpenReport "应收款对账表", acViewPreview, , "客户='" & 客户 & "'"
PrintReport "应收款对账表"
End Sub
如图:
作者: a30088    时间: 2015-5-24 18:48
怎么回事,看看是不是打印代码有错?
作者: a30088    时间: 2015-5-25 10:52
原因何在呢?各位帮忙看下!
作者: roych    时间: 2015-5-25 15:11
a30088 发表于 2015-5-25 10:52
原因何在呢?各位帮忙看下!

附件已更新,供参考。
作者: a30088    时间: 2015-5-26 14:52
本帖最后由 a30088 于 2015-5-26 15:04 编辑

roych老师你,按你的附件做,加多字段变成如下,始终解决不了问题,请指教.
报表源据源:
SELECT Format([Forms]![应收款对账表]![开始日期],"yyyy-mm-dd") & "之前" AS 日期, 对账子表.凭证号,对账子表.类型,对账子表.客户,对账子表.品名,对账子表.颜色,对账子表.匹数,对账子表.重量,对账子表.单价,对账子表.备注,sum([金额]) as 金额1
FROM 对账子表
GROUP BY Format([Forms]![应收款对账表]![开始日期],"yyyy-mm-dd") & "之前",对账子表.日期,对账子表.凭证号,对账子表.类型,对账子表.客户,对账子表.品名,对账子表.颜色,对账子表.匹数,对账子表.重量,对账子表.单价,对账子表.备注,对账子表.金额
HAVING (((对账子表.客户)=[Forms]![应收款对账表]![客户]));
UNION ALL SELECT  format(日期,"YYYY-MM-DD") as 销售日期, 凭证号,类型,客户, 品名,颜色,匹数,重量,单价,备注,金额
FROM 对账子表
WHERE 客户 like iif(isnull([Forms]![应收款对账表]![客户]),"*",[Forms]![应收款对账表]![客户]) and 日期>[Forms]![应收款对账表]![开始日期] and 对账子表.日期<=[Forms]![应收款对账表]![结束日期];


作者: a30088    时间: 2015-5-26 15:15
roych老师帮忙看看
作者: roych    时间: 2015-5-26 15:24
a30088 发表于 2015-5-26 14:52
roych老师你,按你的附件做,加多字段变成如下,始终解决不了问题,请指教.
报表源据源:
SELECT Format([Form ...

第一个问题:
个人觉得,如果你要把1月4号之前的合起来,应该将除了金额以外的字段全部设置为Null的。因为,全部合起来,必然会有不同的凭证号、不同的布匹等等,那么分组合计自然就多几条记录了。
当然,如果非要保留这些字段,又想不显示重复日期的话,只能通过设置“隐藏重复控件”处理了。处理的结果是:第一行有“2015-01-04之前”,后面3行为空值。
第二个问题:我猜,应该是数值格式问题(请检查日期字段或者计算字段是否文本格式,建议对比下我这个例子的日期字段和销量字段)。你可以单独把union all前面那部分拿出来,看看计算结果。
作者: tzh1600    时间: 2015-5-26 15:41
利用查询有很多好处,可以一步步的来,不需要一步就到位
像上面的例子,可以分别做出开始日期前,开始日期到结束日期,结束日期后的查询,再根据需要进行各种联合
作者: a30088    时间: 2015-5-26 15:50
roych老师你,我子窗体数据源是这样:

SELECT format([Forms]![应收款对账表]![开始日期],"YYYY-MM-DD")&"之前" as 日期, null as 凭证号,"上期应收款" as 类型, null as 客户,null as 品名,null as 颜色,0 as 匹数,0 as 重量,0 as 单价,null as 备注,null as 对数,sum([金额]) as 金额1
FROM 对账子表
WHERE  客户 like iif(isnull([Forms]![应收款对账表]![客户]),"*",[Forms]![应收款对账表]![客户]) and 日期<=[Forms]![应收款对账表]![开始日期]
UNION ALL SELECT  format(日期,"YYYY-MM-DD") as 销售日期, 凭证号,类型,客户, 品名,颜色,匹数,重量,单价,备注,对数,金额
FROM 对账子表
WHERE 客户 like iif(isnull([Forms]![应收款对账表]![客户]),"*",[Forms]![应收款对账表]![客户]) and 日期>[Forms]![应收款对账表]![开始日期] and 对账子表.日期<=[Forms]![应收款对账表]![结束日期];


由于直接打印显示不了客户名称,求助你,按你报表数据源更改为下面:

SELECT Format([Forms]![应收款对账表]![开始日期],"yyyy-mm-dd") & "之前" AS 日期, 对账子表.凭证号,对账子表.类型,对账子表.客户,对账子表.品名,对账子表.颜色,对账子表.匹数,对账子表.重量,对账子表.单价,对账子表.备注,sum([金额]) as 金额1
FROM 对账子表
GROUP BY Format([Forms]![应收款对账表]![开始日期],"yyyy-mm-dd") & "之前",对账子表.凭证号,对账子表.类型,对账子表.客户,对账子表.品名,对账子表.颜色,对账子表.匹数,对账子表.重量,对账子表.单价,对账子表.备注,对账子表.金额
HAVING (((对账子表.客户)=[Forms]![应收款对账表]![客户]));
UNION ALL SELECT  format(日期,"YYYY-MM-DD") as 销售日期, 凭证号,类型,客户, 品名,颜色,匹数,重量,单价,备注,金额
FROM 对账子表
WHERE 客户 like iif(isnull([Forms]![应收款对账表]![客户]),"*",[Forms]![应收款对账表]![客户]) and 日期>[Forms]![应收款对账表]![开始日期] and 对账子表.日期<=[Forms]![应收款对账表]![结束日期];


打印出来的结果不是我要的结果,该怎么改"报表数据源".你分析上面的两个问题,我都弄昏了,你就直接帮我修改一下吧!谢谢!
作者: roych    时间: 2015-5-26 18:07
a30088 发表于 2015-5-26 15:50
roych老师你,我子窗体数据源是这样:

SELECT format([Forms]![应收款对账表]![开始日期],"YYYY-MM-DD")&" ...

没有源文件,即便照原有想法去改也不一定符合要求啊。
作者: a30088    时间: 2015-5-26 18:25
本帖最后由 a30088 于 2015-5-26 18:31 编辑

roych老师你好,这是附件,帮我看看,谢谢!
作者: 风中漫步    时间: 2015-5-27 09:19
当然是完全通过查询解决的了。可以在设计模式下右击,查看“SQL视图.
------------------------------------------------------------
谢谢斑竹.不用acc很多年了.现在主要openoffice.它对acc不兼容,只能看到表.其他工具也这水平.所以没人贴我也只能原地打转
作者: roych    时间: 2015-5-27 11:38
a30088 发表于 2015-5-24 17:20
按照roych做的,已经可以实现,这里先谢谢roych先,但打印到报表就会出借,请看下.

“查询过于复杂”一般是字段类型问题
作者: a30088    时间: 2015-5-27 16:55
roych 发表于 2015-5-27 11:38
“查询过于复杂”一般是字段类型问题

roych老师你好,附件看了没有,是不有点难度!!!!
作者: roych    时间: 2015-5-27 17:54
本帖最后由 roych 于 2015-5-27 17:57 编辑
a30088 发表于 2015-5-27 16:55
roych老师你好,附件看了没有,是不有点难度!!!!

不好意思,还没看呢。今天比较忙。是不是只解决报表问题?
作者: 风中漫步    时间: 2015-5-27 18:23
斑竹的sql脱离acc试过吗?
用ado没有通过呢
作者: a30088    时间: 2015-5-27 18:39
本帖最后由 a30088 于 2015-5-28 10:39 编辑
roych 发表于 2015-5-27 17:54
不好意思,还没看呢。今天比较忙。是不是只解决报表问题?

是,附件有打印报表出来的效果图片,但就是显示不出客户名称,估计是第一行空值造成的.......,怎么解决呢?能不能直接从主窗体中文本框的"客户"获取呢?.
作者: a30088    时间: 2015-5-28 14:02
roych 发表于 2015-5-27 11:38
“查询过于复杂”一般是字段类型问题


出问题了,在另外一部电脑(WINXP+ACCESS2010),运行打印出现如下问题,重装ACCESS2010也解决不了问题,什么回事呢?(原WIN7+ACCESS2010上运行没问题)。


作者: roych    时间: 2015-5-28 14:40
本帖最后由 roych 于 2015-5-28 14:57 编辑
a30088 发表于 2015-5-28 14:02
出问题了,在另外一部电脑(WINXP+ACCESS2010),运行打印出现如下问题,重装ACCESS2010也解决不了问题 ...

报表2没问题啊[attach]56440[/attach]
[attach]56443[/attach]
作者: a30088    时间: 2015-5-28 16:28
roych 发表于 2015-5-28 14:40
报表2没问题啊

问题这样

作者: a30088    时间: 2015-5-28 16:35
roych老师,我要打印出来是这样的版面,如图:
作者: roych    时间: 2015-5-28 16:52
本帖最后由 roych 于 2015-6-3 14:27 编辑
a30088 发表于 2015-5-28 16:35
roych老师,我要打印出来是这样的版面,如图:

直接引用测试窗体的控件。[attach]56450[/attach]
看看是不是这样:
[attach]56449[/attach]
6月3日更新:
修正累计字段(最右侧的余额)。

顺便说句,其实那个报表打开条件是可以不设置的。因为数据源里已经处理过了。



作者: a30088    时间: 2015-5-28 17:53
roych 发表于 2015-5-28 16:52
直接引用测试窗体的控件。
看看是不是这样:

roych老师,在那里引用,我怎么看不到啊
作者: a30088    时间: 2015-5-28 18:15
搞定,谢谢roych老师。
作者: topses    时间: 2015-5-30 09:08
roych老师,真是热心{:soso_e179:}
作者: roych    时间: 2015-5-30 11:35
风中漫步 发表于 2015-5-27 18:23
斑竹的sql脱离acc试过吗?
用ado没有通过呢

可以的,只是需要重新处理SQL语句。原帖已更新,有图有真相。请自行查看代码。
作者: 风中漫步    时间: 2015-5-30 13:11
roych 发表于 2015-5-30 11:35
可以的,只是需要重新处理SQL语句。原帖已更新,有图有真相。请自行查看代码。

非常感谢斑竹百忙之中还关注我的问题.
代码在ado中通过.
以前实现这样的功能需要分几步,没想到会1句解决.
看到斑竹的这贴,有收获.
作者: a30088    时间: 2015-6-2 19:04
roych 发表于 2015-5-28 16:52
直接引用测试窗体的控件。
看看是不是这样:

roych老师,打印出来有问题,你看下如图:
作者: a30088    时间: 2015-6-2 19:07
roych老师看看,是不量累加出问题,因累加做在报表上,不是做在查询子窗体上.
作者: a30088    时间: 2015-6-3 11:14
本帖最后由 a30088 于 2015-6-3 11:15 编辑

奇了怪了,为什么会出现这种问题,第一次碰到,而且还找不到原因....................
作者: roych    时间: 2015-6-3 11:42
本帖最后由 roych 于 2015-6-3 12:02 编辑
a30088 发表于 2015-6-3 11:14
奇了怪了,为什么会出现这种问题,第一次碰到,而且还找不到原因....................

应该是你的自定义函数DDSum的问题吧?格式化事件可以加上客户名称,但是你那个合计函数只能在报表打开事件中执行(这样一来就无法加上客户名称了)。有时间再想想。




作者: a30088    时间: 2015-6-3 11:53
roych 发表于 2015-6-3 11:42
应该是你的自定义函数DDSum的问题吧?

""自定义函数DDSum"",有问题,为什么预览没问题?打印出来就有问题,怎么弄,请指点一下.
作者: a30088    时间: 2015-6-3 11:57
roych老师.一般不是预览什么打印出来就是什么吗?即所见所得吗???
作者: a30088    时间: 2015-6-3 12:20
roych 发表于 2015-6-3 11:42
应该是你的自定义函数DDSum的问题吧?格式化事件可以加上客户名称,但是你那个合计函数只能在报表打 ...

那怎么办?
作者: a30088    时间: 2015-6-3 12:35
本帖最后由 a30088 于 2015-6-3 12:37 编辑
roych 发表于 2015-6-3 11:42
应该是你的自定义函数DDSum的问题吧?格式化事件可以加上客户名称,但是你那个合计函数只能在报表打 ...

ACCESS想说爱你真不容就啊!!!


作者: a30088    时间: 2015-6-3 12:47

等待roych老师的解答.
作者: roych    时间: 2015-6-3 14:23
a30088 发表于 2015-6-3 12:47
等待roych老师的解答.

附件已在34楼更新。大致效果如下。顺便说句,我没有用你的自定义函数。
[attach]56527[/attach]

作者: a30088    时间: 2015-6-3 18:03
谢谢roych老师帮忙.看来还是在SQL查询里出问题,谢谢了,已完美解决问题...(那个累加函数白忙了,郁闷啊郁闷啊{:soso_e109:})
作者: cpxie    时间: 2015-6-18 20:25
牛人
作者: 真主    时间: 2015-7-7 19:03
谢谢分享
作者: josam    时间: 2015-8-25 11:20
up up day
作者: yanwei82123300    时间: 2015-8-26 08:16
谢谢分享!!
作者: gaofei186    时间: 2015-8-26 09:18
看看一下
作者: 393166599    时间: 2015-9-17 21:26
学习学习
作者: tanzeyi    时间: 2015-9-18 09:19
学习一下

作者: 34acc    时间: 2015-9-18 21:04
谢谢 roych 老师 分享
作者: jdrawn    时间: 2015-10-30 19:23
学习学习
作者: hyfsdbx    时间: 2015-10-31 10:03
谢谢楼主,学习中
作者: xukexie    时间: 2015-11-6 07:49
这是我一直在寻觅的
作者: 1122wen    时间: 2015-11-6 14:52
下载学习
作者: 1122wen    时间: 2015-11-6 14:53
哎,都好厉害,我都看不懂,什么时候能学习好呀。
作者: a63521557    时间: 2016-8-20 21:43
关注一下
作者: qiang88849    时间: 2016-8-22 11:11
谢谢Roych
作者: xiaowuo2    时间: 2016-8-22 13:46
看看效果如何,老师辛苦了
作者: joelongma    时间: 2016-11-29 14:45
学习一下
作者: 天涯沦落20131    时间: 2016-11-29 17:11
111111111
作者: ACC学徒    时间: 2016-12-18 14:30
rrrrrrrrrrrrr
作者: liuqi67    时间: 2017-2-27 08:58
学习一下!
作者: happy8109    时间: 2017-3-20 20:49
学习一下看看
作者: yz_zax    时间: 2017-9-20 09:45
谢谢Roych!
作者: 灰太郎    时间: 2017-9-21 13:59
11111111111111
作者: boon    时间: 2019-5-1 23:52
谢谢分享,楼主高人
作者: hello_access    时间: 2020-4-19 19:19
学习中
作者: jiang__jin    时间: 2020-12-14 20:37
学习学习
作者: GOODWIN    时间: 2021-8-18 14:00
好例子!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3