我已經創建了一個數據庫/應用程序,其中一個特定的按鈕被點擊時創建一個報告。剛纔,兩個人在同一時間設法敲擊了按鈕,這導致了各種不好的事情。防止按鍵跨越實例
有沒有辦法讓一個按鈕在一個人被點擊後不可見的按鈕?或者某種方式來鎖定數據庫,因此只有首先點擊的人才能完成任何操作。
我有一個解決方案(基本上,一個全局檢查變量,停止報告創建),但現在我想知道是否可以完成其他兩個選項之一。
我已經創建了一個數據庫/應用程序,其中一個特定的按鈕被點擊時創建一個報告。剛纔,兩個人在同一時間設法敲擊了按鈕,這導致了各種不好的事情。防止按鍵跨越實例
有沒有辦法讓一個按鈕在一個人被點擊後不可見的按鈕?或者某種方式來鎖定數據庫,因此只有首先點擊的人才能完成任何操作。
我有一個解決方案(基本上,一個全局檢查變量,停止報告創建),但現在我想知道是否可以完成其他兩個選項之一。
這裏就是我所做的:
If DLookup("PayLock", "table", "pkID=1") Then 'it's locked - exit
MsgBox "Someone else has already started the pay process.", vbOKOnly
Exit Sub
Else
blah blah blah......
下表中的「PayLock」字段保存檢查參數。 「Else」後面是點擊按鈕時運行的實際代碼。
僅供參考,因爲他們被要求:
不好的東西=不止一次支付人,或者根本不支付,或者支付給錯誤的賬戶。我確實有一個清理壞鎖的方法。它仍然取決於用戶對問題的識別 - 我的編碼不是那麼優雅/先進,我可以自己想出如何做到這一點。實質上,當用戶標識一個錯誤的鎖時,他們會單擊一個按鈕來重置表中的檢查變量。 – graidan
這真的有助於在這裏瞭解更多關於你的建築。什麼數據庫?你用什麼語言編寫你的應用程序?併發讀取通常是大多數用戶數據庫的重要和基本特徵。
借調丹尼爾庫克的一般概念,也許解釋一下:沒有按鈕直接運行報告。讓它運行一個小子程序,首先檢查一個特殊用途的表格,其中代表報告「運行」一個新記錄,該記錄具有開始日期時間和結束日期時間。如果表中沒有(空)結束日期的記錄,則報告必須仍在運行,因此,不要開始報告,而是關閉按鈕。否則,插入同一張表,然後開始運行報告。在這個按鈕上添加一個週期性的,不太頻繁的回調來執行相同的檢查,並且你已經接近了一些東西,但不是「實時」的,但是應該在大多數架構中工作(不知道任何關於會話管理功能)。
標籤給出的數據:數據庫爲Access,語言爲VBA。你的建議是我所做的,但我想知道是否有另一種方法來解決這個問題。 – graidan
如果使用全局檢查變量,則意味着更新網絡表中的值並每次檢查它。 。我相信這是你三種方法中唯一可行的方法。報告真的很複雜嗎?如果您只是閱讀數據,這通常是報告的工作方式,那麼應該沒有問題。向我們介紹打開報告的代碼和/或生成報告的代碼? –
如果您有多個用戶並且您的數據庫沒有拆分,報告將成爲您的問題中最少的。 – Fionnuala