如何提示「文件正在使用」訊息你好,
我目前正在創建一個充當資料庫的 JMP 檔案。因此,當其他人已經打開資料庫並對文件進行更改時,我想提示“文件正在使用”訊息並保持文件鎖定以進行編輯。例如,當您在其他人已在使用的伺服器位置上開啟 Excel 檔案時,您會收到相同的訊息:

我想我已經在以下社區帖子中找到了部分答案: 多用戶訪問
如果我是正確的,我仍然需要弄清楚如何鎖定表(如果它被另一個用戶打開)。
有人可以幫忙創建這樣的腳本嗎?
謝謝
資料存取回复:如何提示“文件正在使用”消息它可能適用於 JMP 14。 我報告了我看到的 JMP 15/16 問題。
如果你必須讓它在 15 中工作,你可以像我在 FileSnapper 加載項中使用的這個函數那樣做。
FileSnapper:isFileOpenElsewhere = Function( {filepath}, {dt, savelog},
If( endswith(filepath,".jmp") & File Exists( filepath ),
dt = Open( filepath, private );
savelog = Log Capture( dt << save );
close(dt,"nosave");
Length( savelog ) != 0; // error message means another JMP has dt open
, // else
0 // not open if not exists
)
);它的工作原理是在打開文件後立即嘗試保存文件並捕獲日誌消息。 如果沒有日誌消息,則保存成功。 你想重新安排一下,如果保存成功,可能不會關閉表格,而不是使用私人的. 缺點是如果文件非常大,額外的保存可能需要一些時間,並且它會加倍保存期間發生電源故障的機會,從而損壞數據。 (對於 FileSnapper,該文件是一個哨兵,很小,即將被刪除,並且每次都重新創建,所以它可以正常工作。)
回复:如何提示“文件正在使用”消息好的,感謝您調查這個克雷格。
我將嘗試在我的 JMP 文件中設置來自 David 的腳本。
回复:如何提示“文件正在使用”消息唔。 我可以看到它在 JMP 14 中有效,但可能不適用於 15。
回复:如何提示“文件正在使用”消息David 的腳本具有檢查可見指示的代碼:
Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.Several copies of JMP open, same table in two copies, one of them is locked out by the other.打開 JMP 的幾個副本,同一個表有兩個副本,其中一個被另一個鎖定。
回复:如何提示“文件正在使用”消息感謝克雷奇的回應。
是否可以提示消息/警告該文件已被其他人使用? 目前,第二個用戶可能不知道該文件已被另一個用戶打開。 因此,如果第二個用戶對文件進行了任何更改,這些更改將無法保存到原始文件中。
回复:如何提示“文件正在使用”消息JMP 表被第一個打開它的用戶鎖定以供寫入。 後續用戶獲得只讀訪問權限(他們無法保存更改)。 劇本@David_Burnham wrote 假設擁有鎖的用戶將很快關閉表(嘗試 200 次),然後為新用戶打開表,這應該為新用戶獲得鎖。 對於使用精心編寫的程序更新表的 2 或 3 個用戶來說,它可能工作得很好。 它不適用於可能打開桌子然後不關閉它就去吃午飯的用戶。
回覆:如何提示「文件正在使用」訊息你能發布測試嗎?該檔案是網路檔案還是本地檔案?我不確定 JMP 或作業系統可能會採取什麼不同的做法,但至少有時我認為 JMP 會保存到備用文件,然後刪除/重命名/交換以使斷電故障的視窗盡可能小。可能是過程受到阻礙。 @briancorcoran
回覆:如何提示「文件正在使用」訊息在測試中,我發現一個場景,我可以打開表,但在savelog中沒有訊息,但是當我儲存時,出現錯誤「無法取得檔案結束標記」。這不僅會阻止最新資料的保存,而且整個檔案會消失,所有資料都會遺失。
在測試環境中,我有 2 個腳本,除了一個腳本更新表的第一列而第二個腳本更新第二列之外,它們完全相同。每個腳本都會嘗試更新表 100 次。如果開啟的報告(透過savelog )表已鎖定,那麼它會等待並重新嘗試(沿著我的原始腳本的行)。然而,在這 100 次嘗試中,可能會有一兩次出現文件結束標記錯誤。當開啟檔案(使用儲存日誌測試)或儲存結果(假設存在寫入存取權限時關閉並儲存)時,可能會發生這種情況。我已經在關閉時實現了類似的保存日誌測試,但那時為時已晚,損壞已經造成。
我對這個錯誤的經驗是,如果你在嘗試保存結果時遇到這個錯誤,你就會遇到大麻煩,並且有完全丟失表的風險。因此,我嘗試透過在開啟表格時可靠地獲得讀寫存取權限來消除第一個實例中發生的錯誤。 99% 的情況下我都能做到這一點,但最終我總是會得到錯誤。我懷疑發生的情況是,兩個腳本都獲得對文件的讀寫訪問權限(至少,如savelog 所報告的那樣)的可能性很小,但在某些時候,一個腳本保持讀寫訪問權限,而另一個腳本獲得文件結尾標記錯誤 - 可能是在其他腳本進行更新時)。
回覆:如何提示「文件正在使用」訊息對於 OneDrive 上有檔案的網路磁碟機(在我的實例中為開啟),問題會更嚴重。但我的測試是使用本地文件。 Windows 10、JMP 17。
腳本「locktest1」和「locktest2」相同,只是第一個腳本更新結果表的第 1 列,而第二個腳本更新第 2 列。
透過在單獨的 JMP 實例中同時執行每個腳本,可以對處理檔案鎖的邏輯進行壓力測試。
腳本的第 75 行包含結果表的路徑。將結果表放在適當的位置並更新路徑變數以指向該位置。
開啟 JMP 會話並開啟 locktest1。顯示嵌入的日誌。
開啟第二個 JMP 會話並開啟 loctest2,其中包含嵌入式日誌。
運行兩個腳本(我運行第一個腳本,等到日誌顯示 i=5 然後運行第二個腳本,但這只是迷信)。
第 79 行定義的迴圈執行 50 次迭代。如果兩個腳本成功完成,則結果應該是結果表的兩個欄位中每一列都包含數字 1 到 50。
有一個表格腳本可讓您重設表格內容。
實際上,有 3 種可能的故障模式:
- 顯示一或多條「無法取得檔案結尾標記」訊息。儲存時出現此錯誤,無法儲存結果。因此,結果表中會存在一些缺失值。
- 在某些時候,結果表將會消失。如果找不到該文件,腳本將中止執行並顯示「文件未找到」訊息。
- 有時,兩個腳本都無法獲得表上的鎖。這由兩個腳本都嘗試獲取鎖定 500 次來表明。如果您中止腳本,然後嘗試開啟結果表,它將有一個file_lock表變數。 JMP 的兩個實例都會鎖定表。解鎖它的唯一方法是關閉 JMP 的兩個會話。
50 次迭代通常足以觀察 (1) 和 (2),但有時您需要增加迭代次數才能觀察 (2)。場景 (3) 更有可能發生 100 次迭代並且消除了第 100 行的等待。
回覆:如何提示「文件正在使用」訊息抱歉,忘記了這一點。我製作了數據表從桌面消失的影片並將其發送給開發團隊。謝謝!