没钱也能使Access推磨!三更半夜做报表!

核心提示Access中的查询能够把数据处理和分析过程固化下来,并且还可以设计“基于查询”的查询。只要单击查询链上的最后一个查询就可以一次性地完成烦琐的数据处理和分析操作。这看起来很不错,却有一个问题:我们怎么才能够自动地执行这些查询呢?感谢Acce

Access中的查询能够把数据处理和分析过程固化下来,并且还可以设计“基于查询”的查询。只要单击查询链上的最后一个查询就可以一次性地完成烦琐的数据处理和分析操作。这看起来很不错,却有一个问题:我们怎么才能够自动地执行这些查询呢?

感谢Access,它给我们提供了一种叫做“宏”的功能。我们知道,“宏”的概念在Excel中就有了,Excel中提供的“录制宏”功能能够把我们在Excel中的操作步骤录制下来,以便在将来需要的时候重复执行。

在Access中,不再有Excel中的“录制宏”的概念,我们必须自己“设计宏”或者更确切地说,去“组装宏”。但这并不意味着在Access中宏的使用变得很复杂。事实上,Access已经把我们在Access中可能用到的绝大多数操作都已经预先设置好,我们需要做的只是把这些预定的操作按照实际工作需要的顺序编排起来就行了,从这个角度来讲,Access中的宏用起来反而比Excel中的宏更简单!

假设我们在制造部门工作,有一项日常工作:每天早晨8:00,分析一下在这一时刻(8:00)生产线各个工序的“在制品”库存情况,并且需要把该时刻“在制品”在各个工序的库存数量保存下来,一天天地积累数据,以便将来在需要的时候分析各个工序的“在制品”库存在一段时期内的每天特定时刻的变化趋势。

这里的“在制品”是生产管理方面的常用术语,意思是“制造过程中的产品”,也可以说是“尚未完成的产品”,其英文是Work in Process,简称WIP。

很多大公司都有一套生产追踪系统,用于追踪生产线上的产品的加工状态,为了方便读者理解,假如我们在生产铁皮桶的工厂任职,铁皮桶的生产过程包括4个工序,分别是:

(1)铁板剪裁;

(2)桶体焊接;

(3)桶身喷涂;

(4)最后装箱。

在产品制造过程中,生产追踪系统会实时、动态地“反映”每一个工序的在制品库存数据到系统数据库中,对于每一个工序的“在制品”库存,我们一般只能实时查询当时的情况,而不能查询过去某一时刻在制品库存的历史数据,因为生产执行系统的数据库一般不会持续地保存每一时刻在制品库存数据(如果要保存的话,那将是相当庞大的数据量)。所以,如果要想了解在制品库存在每天某一特定时刻的历史变化趋势,我们必须自己想办法!

为此,我们每天早晨8:00之前来到公司,第一件事就是使用Access的“外部数据→导入并链接”功能把生产执行系统在8:00这个时刻的在制品库存数据提取到Access中,并且“追加”存放到Access中的一个单独的表格中,每天一次,不断积累数据,以便我们在需要时把数据导出到Excel中分析在制品的库存变化趋势。

这个工作如果手动处理,无疑是重复而且单调的,并且时间要求是严格的,假设某一天由于交通堵塞我们未能在8:00之前赶到公司,那么这个抓取在制品库存的工作就耽误了,对于大规模的24小时不间断生产的企业来说,在制品库存是随时变化的,时间一旦错过了,当时的在制品库存数量也就再也无法得到了。

幸运的是,我们完全可以让Access软件帮助我们自动完成这件事情,下面看一下具体的实施过程。

5.1 Access追加查询

假设我们已经用Access界面中的“外部数据》导入并链接》ODBC数据库”功能建立了Access到生产执行系统数据库的链接表,关于如何让Access和数据库直接建立联系,可能需要咨询公司的数据库维护人员。

建立Access到生产执行系统数据库的链接表,实际上就是建立了一个Access表格和生产执行系统数据库中的表格的一个动态链接。该链接表能够实时地反映外部数据的变化情况。

为了定时保存生产执行系统数据库的数据,我们需要再在Access中建立一个和这个链接表结构相同的本地表,用于存储每天某个时刻(如8:00)生产执行系统中实时变化着的“在制品库存”表中的数据。建立与“在制品库存”表结构相同的空表格的方法是:选中“在制品库存”链接表,单击鼠标右键,在弹出的快捷菜单里选择“复制”命令。

在Access界面左侧的Access对象列表的空白处单击鼠标右键,在弹出的右键菜单里选择“粘贴”命令。在弹出“粘贴表方式”对话框中,选择“粘贴选项”选项中的“仅结构”单选框,表示我们只复制原始表格的设计结构,即粘贴一个只含有列标题的空表,而不粘贴其中的数据。同时将粘贴的表格命名为“在制品库存-每日”。该表格将用来保存我们每天在特定时刻从“在制品库存”链接表中抓取的实时在制品库存数据,如图所示。

我们每天在抓取数据时需要知道该数据是何时抓取的,因此,我们需要在刚才复制到Access中的本地表结构中增加一个新的字段用以记录数据抓取时刻。

选中“在制品库存-每日”表,单击鼠标右键,在弹出的快捷菜单中选择“设计视图”命令,对该表格进行结构上的修改。

现在进入表格结构设计视图,在设计视图的上方,列出了该表格的所有字段名称和该字段能够存储的数据类型。我们可以看到,“产品代码”和“当前工序”只能存储文本类型的数据,“在制品数量”只能存储数字类型的数据。


现在在字段列表下方新增加一个字段(实际上是在相应的表中增加了一列),这个字段取名为“数据采集时间”,然后在“字段名称”列的最下方输入这个名称,在右侧的下拉列表中选择该字段只能存储“日期/时间”类型的数据。之所以这样规定,是因为我们想让这一列数据将来能够参与日期和时间相关的计算,如图所示。

下面进入我们“在制品”库存数据采集的关键步骤,即如何把链接表中的实时库存数据的每一行增加一个“数据采集时间”标签后追加到我们刚才设计的空表格中去呢?这里的“追加”的意思是在保留原有的数据的基础上增加新的数据。

在Access中完成这个任务非常容易。在Access中有一种查询类型叫做“追加查询”,该查询类型可以向某个表格中追加新的数据,下面来看一看如何使用Access中的追加查询来完成库存数据的自动采集工作。


在Access中的功能区中选择“创建→查询→查询设计”命令,进入Access查询设计界面。在“显示表”对话框中,列出了Access中的所有表格,因为我们要把“在制品库存”中的数据抓取到“在制品库存-每日”中,因此,我们选择“在制品库存”表,然后单击对话框下部的“添加”按钮,把“在制品库存”表添加到Access查询设计器界面上部,如图所示。

现在选择Access可视化查询设计器上方的“在制品库存”表格结构图中的“*”符号,将其拖曳到下方设计网格的“字段”行中,此时我们发现在查询设计网格的“追加到”行中自动出现了“在制品库存-每日.*”的字样,表示Access将要把“在制品库存”表格中的所有列的内容追加到“在制品库存-每日”对应列中。

这看起来很不错,但我们还没有完成任务,我们还需要在追加的数据中增加数据采集时间,只有这样,采集的数据才能在以后需要的时候按照“数据采集时间”序列分析库存的变化趋势。

单击Access查询设计器网格最后一列“追加到”一行所对应的单元格,在下拉列表中选择“数据采集时间”,表示我们将要向“在制品库存-每日”表格中的“数据采集时间”列追加数据。


向“在制品库存-每日”表中的“数据采集时间”列追加一个表示当前时间的数值,因此,在上方的“字段”行中输入“采集时间:Now”,其含义是我们生成一列新的数据,数据的值是我们追加查询的执行时间,也就是数据采集的时间。Now函数和在Excel中的Now函数一样,是Access里的一个函数,能够得到当前的时间。“采集时间:Now”中的“采集时间”表示我们给该列数据取了一个新名称,叫做“采集时间”,如图所示。

下面单击Access快捷菜单栏里的“保存”按钮,在弹出的“另存为”对话框中,给我们所设计的追加查询取一个有意义的名称,然后单击“确定”按钮。


这时,在Access界面左侧的Access对象浏览器中可以看到多出来了一个Access的项目,就是我们刚刚设计的查询。追加查询的图标是一个绿色的加号加一个黑色的惊叹号,如果我们双击该查询对象,该查询将被立即执行,把当前时刻的在制品库存数据追加到“在制品库存-每日”表中,如图所示。

这时进入了为我们选定的宏动作设置参数的对话框,我们所选动作“OpenQuery”所需的第一个参数就是查询的名称,表示我们要打开哪一个查询。单击宏设计界面右侧的查询列表,在该列表中选择需要执行的查询名称,如图下图所示。

这里我们需要特别注意的是:我们在这里给宏取的名称不是一个一般的名称!如果我们给Access中的宏取名为“AutoExec”则表示这是一个在打开Access数据库文件后,可以自动执行的宏!如果我们给Access取了一个其他的普通名称,那么只有在打开Access数据库文件后,双击这个宏的名称才能够执行,而不会在打开Access数据库时“自动”执行!


下面测试一下AutoExcec宏:关闭Access数据库,再重新打开后,看到弹出如下对话框:“您正准备执行追加查询,该查询将修改您表中的数据。”这说明我们的AutoExcec宏已经自动执行了,只是由于Access中的安全机制,对于修改Access中数据的宏动作,需要用户确认。这里单击“是”按钮,如图所示。

现在双击打开Access对象列表中的“在制品库存-每日”表,我们发现,该表中已经有新的数据追加进去了,而数据的“数据采集时间(追加时间)”已经记录到了表格的最后一列,如图所示。

SetWarnings动作需要放在宏中能够引起报警的动作序列的前面,在SetWarnings动作上按下鼠标左键,把它拖到所有宏动作的最前面。


用SetWarnings动作抑制了警告对话框后,一般情况下,我们还需要在所有宏动作执行完毕后打开警告对话框功能,所以我们在宏序列的最后再增加一个SetWarnings宏动作,设置“打开警告”动作参数为“是”,表示恢复报警功能,如图所示。

选择“文件→Access选项→信任中心”命令,在对话框右侧单击“信任中心设置”选项,在弹出的“信任中心”对话框左侧单击“受信任位置”,在对话框右侧下方单击“添加新位置”按钮。这时弹出“Microsoft Office受信任位置”对话框,如图所示。在“Microsoft Office受信任位置”对话框中选择我们刚刚设计的Access文件所在的文件夹。这样再次双击打开刚刚设计的含有宏的Access文件就不会弹出默认的安全警告对话框了。

这时,再次双击打开Access数据库文件,Access执行宏后,自动关闭数据库,虽然表面看上去好像什么也没发生一样。事实上,在制品库存的实时数据已经被采集到了Access中的“在制品库存-每日”表中了。

我们可以按着Shift键的同时双击打开Access 文件,查看Access文件中的“在制品库存-每日”表中是否增加了新的内容。

修改好AutoExec宏后,回过头来再介绍一下Winows里的“计划任务”工具。“计划任务”工具能够定时打开我们设计的Access程序,“计划任务”工具在需要在某个特定时刻执行某项程序的时候非常有用。


以Windows XP操作系统为例(Win7以后版本也有这个计划任务工具,界面可能有所不同),选择“开始→所有程序→附件→系统工具→任务计划”命令,在“任务计划”窗口中,单击“添加任务计划”按钮,此时弹出“任务计划向导”。在“任务计划向导”对话框中单击“下一步”按钮,如图所示。

进入下面的对话框后,我们给正在设置的任务计划取一个名称,在对话框下部,选择“每天”单选框,表示我们的任务要每天执行。然后单击“下一步”按钮,如图所示。

在这个对话框中,需要输入你的计算机登录时的密码,输入完成后,单击“下一步”按钮,如图所示。

现在,我们在“任务计划”窗口中看到了新增加的任务计划名称,如图所示。好了,现在只要保证我们的计算机处于开机的状态,那么每天早晨8:00,Access就会忠实地帮我们完成本来需要手动完成的工作了!如果我们的任务计划设置在午夜12:00点,那么,我们睡着大觉就把工作做完了!当然,你的计算机需要24小时保持开机。

本文选自《让Excel飞》第二部分内容,对应的电子版,可阅读:《Access带你飞!》百度阅读搜索_林书明

 
友情链接
鄂ICP备19019357号-22