我的一個倉庫管理程序,做了一個主控窗體,並利用主控窗體的timer事件做了一個窗體時鐘,一秒刷新一次,看起來效果還不錯,但惡夢也開始降臨,交給倉庫使用後,操作員老是反應所有窗體的刪除按鈕都不起作用。
我調試時發現,到了這句就出錯:“無法選擇記錄”
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
這句等同於選定記錄。我卻不明白為何不能選擇記錄,就換了另一條命令來刪除記錄:
docmd.RunCommand acCmdDeleteRecord
結果依然不行。
後來又發現只要開著主控窗體,就無法執行刪除命令,我就把主控窗體中Load、Open裡的語句都屏蔽掉,還是不行。
百思不得其解!
一次在主控窗體打開的狀態下修改程序時,輸入“.”號時,後面的對象列表顯示了一下馬上又消失了,因為窗體時鐘在運行,每秒都會刷新一次主控窗體,刷新時就把焦點移到主控窗體上了,所以對象列表就消失了,這時我恍然大悟:罪魁禍首就是timer事件!
因為執行刪除動作時,程序會先選定當前記錄,再刪除選定的記錄,如果你的窗體有記錄選定器就會看到記錄選定器變黑了,如果這時剛好主控窗體刷新時間,就會把焦點移到主控窗體上去,剛才選定的記錄又變成沒選定或是無法選定,就無法執行刪除操作了。
最後,我把主控窗體的時鐘效果去掉,刪除按鈕又可以正常工作了。
另:如果窗體的編輯、刪除屬性為“否”,也會導致刪除按鈕不起作用。