设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1757|回复: 4
打印 上一主题 下一主题

[查询] 关于建立一个灵活的汇总查询的讨论

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-25 21:38:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想建立一个简单的用于财务分析的查询,想做一个比较灵活的查询。大致描述是这样的:
一、初步要求:
1、大致基础查询有【计划/实际】、【年月】、【货品类别】、【货品名称】、【数量】、【金额】,其它字段若干。然后在这个查询的基础上以目标年月(用combo来指定)做与计划做对比(累加金额或数量)。
这个初步要求经过构思没什么大的问题,但在建立过程中想到了一些问题:
a.由于考虑到利用excel的便利性,【实际表】和【计划表】是分开来做的。而【实际表】是由若干个同一个excel内的sheet的链接表。然后在联合查询集中。
在这里如何在设计视图中建立我所需要的链接表?虽然我可以利用向导建立链接表,但不完全符合要求,且不灵活。用docmd.transferspreadsheet代码可以建立理想的链接表,但不知道如何建立的,再按一下就又出来一个链接表。
b.考虑到实际和计划中货品的差异。如何在另外的查询中的一列查找到包含计划和实际的全部货品?
能够用SQL语句直接出来吗?
我的想法是这样的:先把【计划表】和【实际表】联合查询合并成一个表,再在联合查询中用DISTINCT关键字把出现【货品名称】找出来。然后两个列都用sum累加出计划和实际。
二、进一步要求:
1、根据目标年月(用combo来指定)对比上一年同期或上一年同期累计。这个比较复杂。做好能用代码和条件直接对字段的公式和字段名称进行编辑。难点和灵活性就在这里了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-5-28 17:01:15 | 只看该作者
鱼儿游游 发表于 2012-5-26 18:55
请参考我发的帖子(通用窗体数据汇总器 ):http://www.office-cn.net/thread-107703-1-1.html

你的数据库VB代码正在仔细研读。光代码就打印了20-30页。类模块用了N多,好复杂。不过拓宽了思路,一直想请教公共函数和类模块的过程。正好作为教材。
3#
 楼主| 发表于 2012-5-26 14:20:29 | 只看该作者
本帖最后由 williamwangc 于 2012-5-26 14:22 编辑
1、可以从Access直接用SQL语句链接Excel表,方法如下:
SELECT * FROM [Excel 8.0;DATABASE=阁下Excel表的文件夹地址\阁下的Excel表名称.xls].[阁下数据所在标签的名称$]

具体方法还可参见红尘如烟同志专论:http://www.office-cn.net/forum.p ... hlight=%D2%BB%BE%E4


问题一我已学习了版主和红尘如烟版主的办法,完美地解决了问题。
在这里我想补充点自己的体会作为红尘如烟版主和TODAY版主该方案的完善方案。
步骤1:我首先用DOCMD.TRANSFERSPREADSHEET建立链接表。建立这个表的目的并不是为了建立链接表,而是为了学习如何建立链接表而建立的样表。
  1. DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "t", CurrentProject.Path & "/2012年生彩砖作业区台帐.xls", True, "生产资材!A2:L20"
复制代码
这是我的实例,常用TRANSFERSPREADSHEET命令的大家可以看到,原来链接表也是可以指定区域的。
步骤2:新建了这个表T后,打开该表的设计视图,不必理睬它的警告,大家仔细看表属性。里面有一行说明
  1. Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Documents and Settings\Administrator\桌面\对比分析\2012年生彩砖作业区台帐.xls;TABLE=生产资材$A2:L20
复制代码
我发现和TODAYNEW版主的写法有异曲同工之妙。就多了两块,但我不知道
HDR=YES;IMEX=2;HDR=YES;IMEX=2;
具体是什么意思。
步骤3:参考TODAYNEW版主的方法,我复制了前面一段的说明,根据需要稍作修改,直接用SQL建立了一个查询。
  1. SELECT *
  2. FROM [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Documents and Settings\Administrator\桌面\对比分析\2012年生彩砖作业区台帐.xls].[工具器具$A2:L50];
复制代码
实验成功。
但在SQL里也发现了问题:似乎在编辑SQL的时候不能应用类似于CurrentProject.Path这样的变量。一移动位置就又要重新改了。

点击这里给我发消息

4#
发表于 2012-5-26 18:55:28 | 只看该作者
本帖最后由 鱼儿游游 于 2012-5-26 18:56 编辑

请参考我发的帖子(通用窗体数据汇总器 ):http://www.office-cn.net/thread-107703-1-1.html
5#
发表于 2012-5-26 07:24:39 | 只看该作者
问题一的解答:
1、可以从Access直接用SQL语句链接Excel表,方法如下:
SELECT * FROM [Excel 8.0;DATABASE=阁下Excel表的文件夹地址\阁下的Excel表名称.xls].[阁下数据所在标签的名称$]

具体方法还可参见红尘如烟同志专论:http://www.office-cn.net/forum.p ... hlight=%D2%BB%BE%E4

2、货品应在Access或者Excel表中单独建立目录表,该表有一个主键与计划表和实际表链接。分别将计划表和实际表分组查询后,与目录表左联接(Left Join),即获得所有货品目录中的计划与实际(无论其是否具有计划数或者实际数)。

问题二的解答:
1、可在窗体中设若干组合框,分别设置表名称、字段名称、运算符和运算条件等。在程序中将这些运用组合框的值拼接为所需的表达式,将表达式应用于SQL语句、ADO语句或者其他需要计算的地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-29 14:42 , Processed in 0.206361 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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