25 messaggi dal 06 settembre 2002
Ciao a tutti,

mi trovo a dover fronteggiare il seguente problema:

Lavoro con ASP e database Access.
Vorrei dare la possibilità ai miei utenti di creare un testo "a più mani" inserendo dei pezzi cronologici. Detto in altre parole, ogni utente può aggiungere da una form un pezzo di testo che una volta salvato si accoda ai precedenti.
Il problema sta nel fatto che due utenti potrebbero trovarsi a scrivere contemporaneamente lo stesso pezzo col risultato che solo il primo dei due che invia la form riesce a memorizzarlo, lasciando l'altro a bocca asciutta (magari dopo aver passato una mezz'oretta per scrivere il suo testo).

Vorrei poter bloccare il record in modo che se un utente sta scivendo nella form, tutti gli altri ricevano un messaggio di attesa.
Ho provato qualcosa con il parametro locktype ma non sembra funzionare (o lo uso male) anche perché il record lo apro in scrittura nella pagina successiva alla form, quella che appunto recupera il testo e lo salva.

C'è un modo per bloccare il record (o al limite tutto il database) mentre l'utente scrive e poi sbloccarlo una volta inviata e salvata la form?

Aggiungo anche un'altra questione: anche se riuscissi a bloccare il db, se l'utente abbandona la pagina prima di inviare la form il db rimarrebbe bloccato...per quanto tempo? C'è un modo per sbloccarlo dopo un certo periodo?


Grazie mille per l'aiuto!!

ciao
Modificato da indiana il 10 agosto 2006 03.08 -
22 messaggi dal 06 settembre 2002
Ciao
Ho letto la tua mail e mi è venuto in mente un qualcosa del genere: Gli utenti x e y accedono alla form per la scrittura del testo,successivamente procedono all'invio del testo, in questo momento verifichi se il record è aperto in scrittura se è aperto in scrittura allora la variabile dove è stato memorizzato il dato Anziché azzerarla va a riempire di nuovo il form e propone un popup con un messaggio che dice che non è stato possibile accceder al record altrimenti se verifichi che il recond non è aperto in scrittura procedi alla scrittura. Spero di essere stato chiaro, ciao
25 messaggi dal 06 settembre 2002
Ciao

grazie per la risposta. In effetti ci avevo pensato anch'io, ma la soluzione non risolve il problema principale: impedire che un utente cominci a scrivere per poi vedersi rifiutato il pezzo. Se qualcuno sta scrivendo un pezzo del racconto, significa che la storia sta procedendo, per cui il lavoro fatto dall'utnete bloccato è inutile, anche recuperandolo nella form.

Io vorrei poter bloccare subito l'utente, prima che compaia la form con un messaggio tipo: "un altro utente sta scrivendo in questo momento il pezzo che hai scelto... torna più tardi."

Basterebbe bloccare il database al momento che il primo utente apre la form di registrazione (e non solo quando salva il testo) e lasciare il record (o tutto il dataabse) "bloccato e pendente" per il tempo che l'utente impiega a scrivere, sbloccandolo poi quando viene memorizzato il pezzo.
22 messaggi dal 06 settembre 2002
mi viene in mente di usare un flag, cioè io accedo alla pagina dove è contenuto il form nell'istante in cui accedo alla pagina vado a controllare che il flag sia diverso da 1, se lo è mi viene proposto il form e contemporaneamente il flag viene settato ad 1 altrimenti mi viene mostrato un messaggio del tipo ATTENDERE... Quando invio il testo al db come ultima operazione risetto il flag a 0 e così un'altro utente può andare a scrivere sul form. Il flag nella mia soluzione può essere un campo di una tabella del db. Fammi sapere se sono stato chiaro.ciao
25 messaggi dal 06 settembre 2002
Ciao

si, la soluzione è ottima ma ho pensato ad un altro problema: se per caso il primo utente non conclude il testo o non lo invia per qualche motivo? Il flag nel db rimane a 1 per sempre impedendo l'accesso a tutti.
Potrei in questo caso mettere un controllo in home page che verifica il tempo di presenza di questo flag. Se è 1 da più di 2 ore, ad esempio, lo setto a 0 supponendo che l'utente non abbia inviato il testo.

Che ne dici? Altre idee?

Grazie mille!!
575 messaggi dal 23 giugno 2003
www.padovaboy.it
Ciao,
allora analizzando la situazione direi che bisogna prima fare la "lista della spesa".
Hai bisogno di un sistema che:
- avvisi l'utente al caricamento della maschera di inserimento del fatto che un altro operatore sta già SCRIVENDO un nuovo articolo
- che lo blocchi nell'azione del salvataggio
- nel caso in cui non vi sia stato l'avviso all'apertura della maschera, lo faccia all'inserimento, impedendone l'azione e torni indietro con i dati scritti (caso anomalo)

La soluzione più completa a mio avviso non è tanto usare il flag ma utilizzare 2 campi data.
Un campo data deve contenere data e ora dell'ultimo salvataggio effettuato.
L'altro campo deve contenere l'ultima data di accesso alla maschera.

Casistiche:
All'entrata quindi viene registrata la data e ora dell'accesso alla maschera.
Successivamente un altro utente entra: il sistema quindi verifica:
- data ultimo accesso è MAGGIORE dell'ultima data di salvataggio: qualcuno sta lavorando.
Quindi inibisce la possibilità di salvare.

L'utente che sta scrivendo l'articolo salva.
Ora la data di accesso è MINORE alla data di salvataggio: quindi permette l'accesso ad un nuovo utente.

Caso in cui l'utente abbandoni la sessione (magari per problemi di rete) allora si può agire in varie maniere:
- timeout: dopo 40 min di inattività la data di ultimo accesso viene resettata
- gestione: gli operatori si telefonano e si concorda che si può resettare la data "a mano" (con pulsante per intenderci)
- confronto: oltre alla data di accesso si registra l'ID dell'utente collegato in una variabile application. Si dovrebbe anche creare un'altra variabile application che tiene conto dell'ultima "azione" effettuata dall'utente ID per mantenere in vita la sessione e quindi confrontarla con il timeout della sessione impostato: se è scaduta all'ora permettere l'inserimento di dati...etc...

Facci sapere se così aggrada ;)

www.padovaboy.it dal 2001 con furore :D
25 messaggi dal 06 settembre 2002
ciao ragazzi,

siete stati ottimi!

Ho fatto un mix delle vostre considerazioni e sono giunto ad una soluzione che mi sembra funzionale. Ora devo fare un po' di test :)

Grazie davvero per l'aiuto, da solo avrei fatto decisamente più fatica (e forse non ci sarei arrivato!!)

ciao!!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.