Come visualizzare il messaggio "File in uso".CIAO,
Attualmente sto creando un file JMP che funge da database. Pertanto vorrei visualizzare un messaggio "File in uso" e mantenere il file bloccato per la modifica quando qualcun altro ha già aperto il database e sta apportando modifiche al file. Ad esempio, lo stesso messaggio che ricevi quando apri un file Excel su una posizione del server già utilizzata da qualcun altro:

Penso di aver già trovato parte della risposta nel seguente post della community: Accesso multiutente
Se ho ragione, avrei ancora bisogno di capire come bloccare il tavolo se viene aperto da un altro utente.
Qualcuno potrebbe aiutarmi con la creazione di uno script del genere?
Grazie
Accesso ai datiRi: Come visualizzare un messaggio "File in uso".Probabilmente funzionerà in JMP 14. Ho segnalato il problema di JMP 15/16 che stavo riscontrando.
Se devi farlo funzionare in 15, puoi fare qualcosa di simile a questa funzione che ho usato nel componente aggiuntivo 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
)
);Funziona cercando di salvare il file non appena viene aperto e catturando il messaggio di registro. Se non ci sono messaggi di registro, il salvataggio ha funzionato. Vorresti riorganizzarlo un po ', probabilmente non chiudendo la tabella se il salvataggio ha avuto successo e non usando privato . Lo svantaggio è che se il file è molto grande, il salvataggio extra potrebbe richiedere del tempo e raddoppia la possibilità di avere un'interruzione di corrente durante un salvataggio, danneggiando i dati. (Per FileSnapper, il file è una sentinella, piccola, che sta per essere cancellata e ricreata ogni volta, quindi funziona bene.)
Ri: Come visualizzare un messaggio "File in uso".Ok, grazie per aver esaminato questo Craig.
Proverò a configurare lo script di David nel mio file JMP.
Ri: Come visualizzare un messaggio "File in uso".Hmm. Posso vedere che funziona in JMP 14, ma forse non 15.
Ri: Come visualizzare un messaggio "File in uso".Lo script di David ha il codice che controlla l'indicazione visibile:
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.Diverse copie di JMP aperte, stessa tabella in due copie, una delle quali è bloccata dall'altra.
Ri: Come visualizzare un messaggio "File in uso".Grazie per le risposte Craig.
Sarebbe possibile richiedere un messaggio/avviso che il file è già in uso da qualcun altro? Attualmente, il secondo utente potrebbe non sapere che il file è già aperto da un altro utente. Pertanto, se il secondo utente apporta modifiche al file, queste modifiche non possono essere salvate nel file originale.
Ri: Come visualizzare un messaggio "File in uso".Una tabella JMP è bloccata per la scrittura dal primo utente che la apre. Gli utenti successivi ottengono l'accesso in sola lettura (non possono salvare le modifiche). Il copione @David_Burnham write presuppone che l'utente con il blocco chiuderà la tabella abbastanza presto (200 tentativi) e quindi aprirà la tabella per il nuovo utente, che dovrebbe ottenere il blocco per il nuovo utente. Potrebbe funzionare abbastanza bene per 2 o 3 utenti che utilizzano un programma scritto con cura per aggiornare la tabella. Non è per un utente che potrebbe aprire il tavolo e poi andare a pranzo senza chiuderlo.
Re: Come visualizzare il messaggio "File in uso".Puoi postare il test? E il file è un file di rete o un file locale? Non sono sicuro di cosa potrebbero fare diversamente JMP o il sistema operativo, ma almeno a volte penso che JMP salvi in un file alternativo, quindi elimini/rinomini/scambia per ridurre al minimo la finestra relativa a un'interruzione di corrente. Potrebbe essere che il processo si stia intromettendo. @briancorcoran
Re: Come visualizzare il messaggio "File in uso".I problemi sono peggiori con un'unità di rete (attiva nel mio caso) con un file su OneDrive. Ma i miei test sono stati con un file locale. Windows 10, JMP 17.
Gli script "locktest1" e "locktest2" sono identici, tranne per il fatto che il primo script aggiorna la colonna 1 della tabella dei risultati mentre il secondo script aggiorna la colonna 2.
Eseguendo ciascuno script simultaneamente in istanze JMP separate è possibile sottoporre a stress test la logica per la gestione dei blocchi dei file.
La riga 75 degli script contiene il percorso per la tabella dei risultati. Posiziona la tabella dei risultati in una posizione adatta e aggiorna la variabile del percorso in modo che punti a questa posizione.
Aprire una sessione JMP e aprire locktest1. Mostra il registro incorporato.
Apri una seconda sessione JMP e apri loctest2, con un registro incorporato.
Esegui i due script (eseguo il primo, aspetto finché il log non mostra i=5 e poi eseguo il secondo, ma è solo superstizione).
Il ciclo definito alla riga 79 esegue 50 iterazioni. Se i due script vengono completati con successo, il risultato dovrebbe essere che la tabella dei risultati conterrà i numeri da 1 a 50 in ciascuna delle due colonne.
Esiste uno script di tabella che ti consentirà di reimpostare il contenuto della tabella.
In pratica esistono 3 possibili modalità di guasto:
- Vengono visualizzati uno o più messaggi "impossibile ottenere l'indicatore di fine file". Questo errore si verifica durante il salvataggio e non è possibile salvare i risultati. Pertanto ci saranno alcuni valori mancanti nella tabella dei risultati.
- Ad un certo punto, la tabella dei risultati svanirà. Se il file non viene trovato, gli script interrompono l'esecuzione con il messaggio "file non trovato".
- Occasionalmente, entrambi gli script non riescono a ottenere un blocco sulla tabella. Ciò è indicato da entrambi gli script che effettuano 500 tentativi per ottenere un blocco. Se interrompi gli script e poi provi ad aprire la tabella dei risultati, avrà una variabile di tabella file_lock . Entrambe le istanze di JMP avranno la tabella bloccata. L'unico modo per sbloccarlo è chiudere entrambe le sessioni di JMP.
50 iterazioni sono generalmente sufficienti per osservare (1) e (2), ma occasionalmente è necessario aumentare il numero di iterazioni per vedere (2). Lo scenario (3) è più probabile con centinaia di iterazioni e con l'attesa sulla linea 100 rimossa.
Re: Come visualizzare il messaggio "File in uso".Durante i test trovo uno scenario in cui posso aprire la tabella senza alcun messaggio in savelog , ma quando arrivo al salvataggio ricevo un errore "Impossibile ottenere l'indicatore di fine file". Ciò non solo impedisce il salvataggio dei dati più recenti, ma l'intero file scompare e tutti i dati vengono persi.
Nell'ambiente di test ho 2 script, identici tranne che uno script aggiorna la prima colonna della tabella e il secondo script aggiorna la seconda colonna. Ogni script tenta di aggiornare la tabella 100 volte. Se open segnala (tramite savelog ) che la tabella è bloccata, attende e riprova (sulla falsariga del mio script originale). Tuttavia, forse una o due volte su 100 tentativi si verificherà un errore di marcatura della fine del file. Ciò potrebbe verificarsi all'apertura del file (con il test del registro di salvataggio ) o al salvataggio dei risultati (chiusura e salvataggio presupponendo che sia disponibile l'accesso in scrittura). Ho implementato un test di salvataggio simile alla chiusura, ma a quel punto è troppo tardi, il danno è fatto.
La mia esperienza con questo errore è che se lo ottieni mentre provi a salvare i risultati sei in grossi guai e rischi di perdere completamente la tabella. Quindi provo a concentrarmi sull'eliminazione dell'errore che si verifica in prima istanza cercando di ottenere in modo affidabile l'accesso in lettura e scrittura all'apertura della tabella. Il 99% delle volte ci riesco, ma alla fine riesco sempre a ottenere l'errore. Sospetto che ciò che accade sia che ci sia una minima possibilità che entrambi gli script ottengano l'accesso in lettura e scrittura al file (almeno, come riportato da savelog) ma a un certo punto uno script mantiene l'accesso in lettura e scrittura e l'altro script ottiene la fine del file errore marcatore - probabilmente quando l'altro script ha effettuato un aggiornamento).
Re: Come visualizzare il messaggio "File in uso".Scusa, ne ho perso traccia. Ho realizzato un video della tabella dati che scompare dal desktop e l'ho inviato al team di sviluppo. Grazie!