2010-06-22 65 views
0

我需要在午夜24小时运行一次流程。不管它是在12:00:00还是在12:00:03,只要在午夜左右。如何安排流程?

我需要一个计时器控件来检查每分钟的时间,或者是否有更复杂/更简单的方法?

如果if语句检查当前是否是午夜,该怎么办?

+0

我不是一个VBA家伙(我不知道你的环境),但是这不需要你的数据库在午夜时间开放吗? – Kendrick 2010-06-22 16:11:08

+2

本文介绍了使用Access Timer事件时设置的几个陷阱,以及“可能”一些解决方法http://www.bluemoosetech.com/article.php?jid=8 – 2010-06-22 16:13:31

+0

良好的链接,@belisarius。例如,如果它提到您可以经常使用Windows Scheduler运行vbScript来执行数据更新,那么它将是一个很好的补充。 – 2010-06-22 23:32:20

回答

2

运行你想要的代码VBS文件你有需要离开数据库中打开所有的时间?

如果不是,请考虑使用Windows计划程序创建任务以在午夜打开数据库。使用一个autoexec宏,可在数据库打开时启动您的进程。

如果您不希望每次打开数据库时都要运行该进程,请将宏命名为autoexec以外的其他名称。然后在Windows调度程序中创建任务时,使用Access'/exec命令选项和您的宏名称。

更新:在回答“会是什么,如果检查语句是否是午夜目前”,你可以用这个表达式:

If TimeValue(Now()) = #12:00:00 AM# Then 

不过,我怀疑这会你很好,因为那只会在午夜才会成真。如果您的流程尚未完成,您希望您的流程在12:01 AM运行。所以我认为你需要的是一个带有日期/时间字段,run_date和该字段唯一索引的CompletedJobs表。然后,可以使用Date函数的DCount来查看CompletedJobs中是否存在今天的日期。

DCount("run_date", "CompletedJobs", "run_date = #" & Date() & "#") 

如果DCount <> 0,您的过程今天已经运行。如果DCount = 0,运行你的进程,然后将今天的日期插入CompletedJobs。

INSERT INTO CompletedJobs (run_date) 
VALUES (Date()); 
0

你能不能用任务调度运行可能使用ActiveX到你的数据库

+0

即时通讯对不起最新的vbs文件>? – 2010-06-22 16:22:16

+0

您可以通过名为autoexec的宏打开访问文件,并执行代码(假定此代码已经写入)。 – JeffO 2010-06-22 16:25:17

+0

vbs = vbScript。这与VBA非常相似,但没有为变量输入数据(所有变量都是变量)。 VBA代码通常很容易转换,只要您了解如何使其适应后期绑定即可。 – 2010-06-22 23:33:29