降低Access 2000中的附加查询数量?

时间:2017-07-10 07:13:29

标签: vba ms-access

我必须制作168行报告。它们中的大多数都是顺序数据,但是我需要构建辅助表的总和行。

因此我需要构建45-50个查询,其中大多数是附加查询。

有没有办法最小化查询数量并开发包含168行的大型报告?

我应该使用代码吗?

2 个答案:

答案 0 :(得分:2)

就在去年,我创建了一个复杂的,多部分和多页的报告,其中包含图形,汇总,运行平均值,趋势,“数据透视表”等。我没有计算数据的“行数”,但是我做了一些事情来管理很多查询:

  • 最重要的经验教训:经过大量优化并尝试整合和重用查询和临时表后,仍然发现没有一组“神奇的”查询会返回您需要的数据。即使您将SQL查询的数量从45减少到35(在许多情况下这会令人印象深刻),仍然需要以智能方式管理许多查询。关键是要更多地考虑编写可管理的查询和良好的基础架构,而不是将重点放在减少数量上。 (如果您的流程类似,那么无论如何,您将不可避免地要在以后添加更多查询和更多详细信息。)
    • 联盟查询确实有自己的位置,有时是必要的,但简单地将查询组合起来“减少数量”可能会产生负面影响。 1)无法使用“设计视图”构建或可视化联合查询。我认为自己是一个“真正的编码器”,但我仍然很欣赏能够使用UI组件的能力。 Design View提供各种有用的语法和数据类型检查。 2)在调试和优化中通常可以单独运行查询。 3)如果不需要重复删除和排序,联合会不会提高效率,实际上可能会减慢查询速度。 4)我遇到了某些完全正确的查询,这些查询在联合中组合时会导致错误。我还没有学会如何预测这种行为,所以几乎不值得一提......除了不要误以为个别查询有点瑕疵。 (通常有解决方法。)
  • 在单独的Access数据库中创建所有相关的报表查询和临时表,并链接到主数据库。换句话说,如果可能,请创建单独的报告前端。这不仅可以保持源数据库更清洁,还可以提高效率(高度依赖于用户数量以及他们共享数据库的方式)。
  • 使用一致模式命名查询。我尝试使用编号查询取得了一些成功。我个人发现描述性名称比简短而神秘的名称更有用。然而,大量切割和粘贴变得必要。
  • VBA代码或宏可能比单个保存的查询更好。
    • 我很少使用复杂的宏,因此大多数这些技巧都与VBA代码相关,但我不反对宏,因为它们提供至少一些类似的好处。也可以在没有太多工作的情况下创建一个有用的“仪表板”表单,使VBA代码单击运行类似于宏。
    • 注释可以包含在SQL旁边。这在概述丑陋的SQL时非常有用。例如,值得解释为什么选择具有额外WHERE标准的LEFT JOIN而不是INNER JOIN,尤其是为了防止“有帮助”的同事(或您自己)重写查询而发现他们未能考虑所有原始上下文
    • 可以实时跟踪和调试整个查询文本和执行序列。如果错误处理被适当编码,您可以创建自定义日志和专门处理错误。可以编辑并重新运行SQL文本,而无需停止整个过程。
    • 查询参数可以传递给查询而不会出现难以置信的UI提示。参数可用于使用用户输入编码正确的查询(即避免SQL注入),并且可以减少仅具有不同输入或标准但在其他方面相同的类似查询的数量。
    • 可以在事务中包装多个查询,并将所有查询一起提交或回滚!不确定宏是否支持此操作。

答案 1 :(得分:1)

您可以将SQL移动到VBA,移动到宏,或者如果它们全部附加到一个表,则创建一个大的union子查询。所有人都将实现这一目标。为了实用性,我经常选择宏,因为它点击运行。首先SetWarnings,然后链RunSQL语句。

如果适用,UNION查询也是优雅的解决方案。