Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

每月初触发一次实现取上月末数据作为期初数据

hui  发表于:2009-02-04 08:46:48  
复制

ACESS能否实现每月的第一天触发一次取某个表中的上月末数据作为表中另一字段“期初数”的值?该值在本月内不再改变。

例如:

    表A中有字段“合格数”和“期初数”

    “合格数”是指每发生一笔业务就需要更新一次的,也就是说就是不停的有变动的

    “期初数”是指上月末转入本月的“合格数”,在本月内将不再改变。

 

请问ACESS能否每月自动实现触发一次?不需人为的再去执行?

 

Top
sosopain 发表于:2009-02-04 08:53:49

打开数据库的时侯做一个判断,

 

IF 没有本月月结数据 then 执行月结转

 

 



hui 发表于:2009-02-04 09:08:47

To  JasonJiang

 

    每次打开数据库的都要执行啊?能否一个月只执行一次呢?

 

    能否给段语句或者例子参考一下?



sosopain 发表于:2009-02-04 11:31:08

每次打开只是检查判断, 比你执行一个运行时定期触发的检查事件 系统开销要小得多,你基本上没有感觉执行过,

 

不记得access2003如何建立一个打开数据库就指定的模块 你可以查查帮助文件

 

access2007 是建立一个名字为 autoexec 的宏, 宏里面建立runcode命令指向你的模块函数  就可以了

 

 

 

 



sosopain 发表于:2009-02-04 11:33:26

在一个完整的系统里面, 这个运行前检查作用很大, 比如可以提醒业务进程, 校验用户级数据完整, 甚至可以检查权限和环境的合法性.

 

我自己的系统就是采用这种方式, 不知道有没有更好的方案.

 



zhang 发表于:2009-02-04 13:29:18
这个是可以实现的,将上个月数据自动作为期初数据!问题是要注意由于输入或其他因素,没有输入本月最后一个数据录入,它与前一个月的数据差是0。

ACMAIN.CHM 发表于:2009-02-04 22:36:33

方案一: 如果你的电脑或服务器是24小时开机,则在你的WINDOWS的计划任务中加一条任务,比如每个月1号的02:00的时候自动跑一个脚本,执行一下你的月结指令。详见WINDOWS控制面板中的计划任务。WINDOWS的HELP中说得很详细,这儿就不贴帮助中的内容了。

 

方案二:如果这个数据完全等于上期的余额,则这两个数据完全属于冗余,那么在本期则完全可以不要这条数据。在SQL查询中实现即可。这样也就不存在月结的问题。



sosopain 发表于:2009-02-05 00:46:16

ACMAIN0CHM高人 商榷

 

我也想过你这两个方案,

方案一, 这个脚本写起来有点麻烦~~access又不支持命令行打开(或者我不知道如何做?) 对于发布的脚本处理也比较麻烦。

 

方案二, 如果数据量特别大的话, 有时候冗余数据可以缓解系统负担, 也有利于多数据校验,比如我在遇到处理一个日余额的时侯,需要用到运行时求和 如果数据多到300条,基本上查询起来可用性就不告了。

 

请指点。。



hui 发表于:2009-02-05 13:55:37
期待中....

马山杨梅 发表于:2009-02-05 17:24:39

可不可以换个想法,不一定要每月触发一次,而是每条记录都触发。

我给个思路是这样的,在窗体的插入前事件中放入如下红色代码:

Private Sub Form_BeforeInsert(Cancel As Integer)
If Month(Date) = Month(DLast("日期", Me.RecordSource)) Then ''首先判断当前月份是否等于上面最后一条记录的月份
期初数.DefaultValue = "'" & DLast("期初数", Me.RecordSource) & "'" ''若是,则令当前期初数的默认值=最后一条记录的期初数
Else
期初数.DefaultValue = "'" & DLast("合格数", Me.RecordSource) & "'" ''若不是,则令当前期初数的默认值=最后一条记录的合格数
End If

End Sub

这样的好处是你上月任意号作的最后记录,再到本月任意号开始新记录都能实现你说的效果。

只是我刚学VBA,上面代码可能有滑稽之处,还请老师们完善。

点击下载此附件

总记录:9篇  页次:1/1 9 1 :