"파일 사용 중" 메시지를 표시하는 방법안녕,
현재 데이터베이스 역할을 하는 JMP 파일을 생성 중입니다. 따라서 다른 사람이 이미 데이터베이스를 열고 파일을 변경하는 경우 "파일 사용 중" 메시지를 표시하고 편집을 위해 파일을 잠긴 상태로 유지하고 싶습니다. 예를 들어, 이미 다른 사람이 사용하고 있는 서버 위치에서 Excel 파일을 열 때 나타나는 동일한 메시지는 다음과 같습니다.

다음 커뮤니티 게시물에서 이미 답변의 일부를 찾은 것 같습니다. 다중 사용자 액세스
내 말이 맞다면 다른 사용자가 테이블을 열었을 때 테이블을 잠그는 방법을 알아내야 할 것입니다.
누군가 그러한 스크립트를 작성하는 데 도움을 줄 수 있습니까?
감사해요
데이터 접근Re: "사용 중인 파일" 메시지를 표시하는 방법아마도 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의 경우 파일은 작은 센티넬이며 매번 삭제되고 다시 생성되므로 정상적으로 작동합니다.)
Re: "사용 중인 파일" 메시지를 표시하는 방법네, Craig를 찾아주셔서 감사합니다.
JMP 파일에서 David의 스크립트를 설정하려고 합니다.
Re: "사용 중인 파일" 메시지를 표시하는 방법흠. JMP 14에서는 작동하지만 15에서는 작동하지 않는 것을 볼 수 있습니다.
Re: "사용 중인 파일" 메시지를 표시하는 방법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.JMP의 여러 복사본이 열려 있고 동일한 테이블이 두 복사본에 있으며 그 중 하나는 다른 복사본에 의해 잠겨 있습니다.
Re: "사용 중인 파일" 메시지를 표시하는 방법Craige님 답변 감사합니다.
파일이 이미 다른 사람에 의해 사용 중이라는 메시지/경고를 표시할 수 있습니까? 현재 두 번째 사용자는 파일이 이미 다른 사용자에 의해 열려 있다는 사실을 모를 수 있습니다. 따라서 두 번째 사용자가 파일을 변경하면 이러한 변경 사항을 원래 파일에 저장할 수 없습니다.
Re: "사용 중인 파일" 메시지를 표시하는 방법JMP 테이블을 여는 첫 번째 사용자가 쓰기 위해 JMP 테이블을 잠급니다. 후속 사용자는 읽기 전용 액세스 권한을 갖습니다(변경 사항을 저장할 수 없음). 스크립트 @David_Burnham write는 잠금이 있는 사용자가 곧 테이블을 닫을 것이라고 가정하고(200번 시도) 새 사용자를 위한 테이블을 엽니다. 그러면 새 사용자에 대한 잠금을 가져와야 합니다. 테이블을 업데이트하기 위해 주의 깊게 작성된 프로그램을 사용하는 2~3명의 사용자에게는 꽤 잘 작동할 수 있습니다. 테이블을 열고 닫지 않고 점심을 먹으러 갈 수 있는 사용자를 위한 것이 아닙니다.
Re: "파일 사용 중" 메시지를 표시하는 방법테스트를 게시할 수 있나요? 그리고 그 파일은 네트워크 파일인가요, 아니면 로컬 파일인가요? JMP나 OS가 어떻게 다르게 작동하는지 잘 모르겠지만 적어도 가끔은 JMP가 대체 파일에 저장한 다음 삭제/이름 변경/교환을 통해 정전 오류에 대한 기간을 최대한 작게 만드는 것 같습니다. 그 과정이 방해가 될 수도 있습니다. @briancorcoran
Re: "파일 사용 중" 메시지를 표시하는 방법테스트 중에 savelog 에 메시지 없이 테이블을 열 수 있는 시나리오를 찾았지만 저장하려고 하면 "파일 끝 표시를 가져올 수 없습니다"라는 오류가 발생합니다. 이렇게 하면 최신 데이터가 저장되지 않을 뿐만 아니라 전체 파일이 사라지고 모든 데이터가 손실됩니다.
테스트 환경에는 2개의 스크립트가 있는데, 하나의 스크립트가 테이블의 첫 번째 열을 업데이트하고 두 번째 스크립트가 두 번째 열을 업데이트한다는 점을 제외하면 동일합니다. 각 스크립트는 테이블 업데이트를 100회 시도합니다. 오픈 보고서가 ( savelog 를 통해) 테이블이 잠겨 있다고 보고하면 (원본 스크립트의 라인을 따라) 기다렸다가 다시 시도합니다. 그러나 100번의 시도 중 한두 번은 파일 끝 표시 오류가 발생할 수 있습니다. 이는 파일을 열 때( savelog 테스트 사용) 또는 결과를 저장할 때(쓰기 액세스가 있다는 가정하에 닫고 저장하는 경우) 발생할 수 있습니다. 닫을 때 유사한 저장 로그 테스트를 구현했지만 그때쯤이면 너무 늦어서 손상이 발생했습니다.
제가 경험한 이 오류는 결과를 저장하려고 할 때 오류가 발생하면 큰 문제에 빠지고 테이블을 완전히 잃을 위험이 있다는 것입니다. 그래서 테이블을 열 때 안정적으로 읽기-쓰기 액세스 권한을 얻으려고 노력하여 첫 번째 인스턴스에서 발생하는 오류를 제거하는 데 집중하려고 합니다. 99%의 경우 이 작업을 수행하지만 결국에는 항상 오류가 발생할 수 있습니다. 나는 두 스크립트 모두 파일에 대한 읽기-쓰기 액세스 권한을 얻을 가능성이 희박하다고 생각합니다(적어도 savelog에 보고된 대로). 그러나 어느 시점에서 한 스크립트는 읽기-쓰기 액세스를 유지하고 다른 스크립트는 파일의 끝을 얻습니다. 마커 오류 - 아마도 다른 스크립트가 업데이트했을 때 발생함).
Re: "파일 사용 중" 메시지를 표시하는 방법OneDrive에 파일이 있는 네트워크 드라이브(내 인스턴스의 경우)에서는 문제가 더 심각합니다. 하지만 내 테스트는 로컬 파일을 사용하여 수행되었습니다. 윈도우 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의 두 세션을 모두 닫는 것입니다.
일반적으로 (1)과 (2)를 관찰하려면 50번의 반복이면 충분하지만 (2)를 보려면 반복 횟수를 늘려야 하는 경우가 있습니다. 시나리오 (3)은 100회 반복되고 100번째 줄의 대기가 제거된 경우일 가능성이 높습니다.
Re: "파일 사용 중" 메시지를 표시하는 방법죄송합니다. 내용을 잊어버렸습니다. 데스크탑에서 데이터 테이블이 사라지는 모습을 영상으로 제작하여 개발팀에 보냈습니다. 감사해요!