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?uec=bg&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, 陳格 保留所有權利