Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 窗体  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702127
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

如何让 ACCESS 自动定时执行某段代码?

作者:cg1  摘自:access911.net  :cg1  更新日期:2005-4-5  浏览人次:

 

问题:

如何让 ACCESS 在每周周一0点清除上周的所有数据?

 


方法一:


方法非常多,可以完全靠 ACCESS 本身的功能,也可以靠 WINDOWS 控制面板中的任务计划结合 ACCESS 来完成,甚至可以用WINDOWS 控制面板中的任务计划结合 VBS 脚本来完成。

首先介绍完全用 ACCESS 来完成
建立一个窗体来实现即可


'新建一个窗体,将下列代码 COPY 到该窗体的代码模块中
'定义一个变量来存储预定时间,你也完全可以将时间放在数据表中
Dim dte As Date

Private Sub Form_Open(Cancel As Integer)
    '定义时间间隔,每隔8秒检测一次时间
    Me.TimerInterval = 8000
    '预定两分钟后执行某段代码
    dte = DateAdd("n", 2, Now())
End Sub

Private Sub Form_Timer()
    '这里判断现在时间是否已经到达预定时间
    If Now() > dte Then
        MsgBox "这里可以执行某段代码"
        '执行一次代码后调整预定时间再次准备执行,
        '你也可以编写其他程序询问可以是否继续执行,
        '如果不要继续执行设定 Me.TimerInterval = 0 即可。

        dte = DateAdd("n", 2, Now)
    End If
End Sub

Private Sub 主体_Click()
    Dim lngSelect As Long
    Dim strMSG As String
    strMSG = "当你单击窗体时,本窗体会隐藏,在后台执行程序" & vbCrLf & _
             "如果你要恢复,请依次单击 菜单 -> 窗口 -> 取消隐藏 -> 确定" & _
             vbCrLf & "如果要隐藏请单击“是”,不要隐藏请单击“否”"
    lngSelect = MsgBox(strMSG, vbYesNo, "请选择...")
    If lngSelect = vbYes Then
        Me.Visible = False
    End If
End Sub


有网友说上述功能要实现,ACCESS 必须 24 小时开着,否则如果要实现“每周周一0点清除上周的所有数据”这样的功能就不行了。
这里就要说一下原理的问题了。各位网友先想一下以下问题:
1.1:一定要周一0点运行上述程序么?
1.2:你必须有客户端要求获取数据,这个时候你才能确定数据是否清除,是么?
1.3:也许你是没有客户端要求读取数据,而是有客户端不断写入数据,但是如果本周一0点以前的数据必须清除没有清除会造成写入数据的错误,是么?

现在就来说解决方案
2.1:数据库本身没必要自动感知今天是否周一0点,是否要去清除数据
2.2:你可以在要被清除数据的表中加一个时间字段。在1.2和1.3的代码执行前去判断是否有过期数据。如果有,清除,然后执行正常的操作;如果没有,直接执行正常的操作。

 


方法二:

WINDOWS 控制面板中的任务计划结合 ACCESS 来完成也可以。
1、将所有要执行的步骤写为某个 VBA  FUNCTION。举例:名为 MyExec
2、要在打开数据库时运行 Visual Basic for Applications 过程,请在 Autoexec 宏或通过使用命令行选项 /x 来运行的宏中使用 RunCode 操作。举例:创建一个名为 aaa 的宏,操作为 RunCode ,函数名 MyExec()
3、在WINDOWS 控制面板中的任务计划中创建计划,用类似以下命令行:
"D:\Program Files\Microsoft Office\OFFICE11\msaccess.exe" c:\temp\db6.mdb /x aaa

注意:ACCESS 2003 有安全警告 功能,在默认设置下无法直接用命令行打开 MDB 后立即运行代码,必须还要单击一个“打开”按钮。要去掉此项设置可以降低安全级别或者用数字证书。

    如何取消 Access2003 刚打开的安全警告或者 RUNTIME 的安全警告?《发布》
    http://access911.net/index.asp?u1=a&u2=72FAB01E11DCEFF3

数字证书相关内容可以参考MSDN。

 

方法二:

用 WINDOWS 控制面板中的任务计划结合 VBS 也可以。因为 VBS 的代码与 VBA 非常相似,所以要学习非常快。但是相关内容已经不是 ACCESS 的编程范围,这里就不再讨论了。

 

本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
     如何使本机时间与服务器时间同步?
     如何对两个时间相加?多个日期时间作为条件进行对比判断的问题
     如何计算两个时间间隔并转换成“N天N小时N分N秒”这样的形式?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利