Inserimento dati in due front-end in contemporanea

di il
35 risposte

Inserimento dati in due front-end in contemporanea

Ciao a tutti, ho creato un database formato da un BE allocato in un server e tre FE, con tabelle collegate, dove operano altrettanti utenti. Per l'inserimento dei dati ho usato una maschera chiamata “Inserisci”, presente in tutti e tre i FE associata ad una tabella chiamata “Tabellainserimento” che, una volta popolata, tramite una query di accodamento, trasferisce i dati nella tabella principale chiamata “Tabelladati” composta dagli stessi campi. Vorrei sapere  se è possibile che, quando un utente sta usando la propria maschera “Inserisci”, gli altri due utenti non possano aprire la loro maschera “Inserisci” fin che il primo utente non ha completato l'operazione d'inserimento, grazie.

35 Risposte

  • Re: Inserimento dati in due front-end in contemporanea

    06/02/2024 - Rox63 ha scritto:


    Vorrei sapere  se è possibile che, quando un utente sta usando la propria maschera “Inserisci”, gli altri due utenti non possano aprire la loro maschera “Inserisci” fin che il primo utente non ha completato l'operazione d'inserimento, grazie.

    Si è possibile…

  • Re: Inserimento dati in due front-end in contemporanea

    06/02/2024 - sihsandrea ha scritto:


    sihsandrea

    Grazie per la velocità con cui hai risposto, puoi gentilmente darmi una dritta su come fare? Io, nel frattempo, avevo pensato di aggiungere un campo numerico con valore predefinito 0 nella “Tabellainserimento”  che al momento dell'apertura della maschera collegata, da parte di un utente, diventasse il valore 1 in modo che, tramite un codice vba, bloccasse temporaneamente l'apertura agli altri utenti, ma non la vedo una buona soluzione visto che non ho ancora avuto il tempo di provarla quindi non so se può funzionare.

  • Re: Inserimento dati in due front-end in contemporanea

    Questa potrebbe essere una strada..

    Tabella inserimento per cosa?

    Inserimento articoli? Clienti? Fornitori? Cosa?

    Potresti creare una tabella dove i campi sono i nomi dei form e flaggarli a 1 se la maschera è in uso.

    Prima di aprire il form verifichi che sia a 0 e lo imposti a 1. (O idutente/null così sai che se pippo è in pausa caffè con la maschera aperta sai chi cercare…)

    Magari mandi un messaggio ‘pippo collegato’.

    Perché una tabella in locale?

    Altro discorso se vuoi bloccare la tabella (pericoloso se usata in altri form).

  • Re: Inserimento dati in due front-end in contemporanea

    06/02/2024 - sihsandrea ha scritto:


    sihsandrea

    Grazie mille, mi hai dato buoni spunti per risolvere, domani provo e poi ti dico com'è andata. 

  • Re: Inserimento dati in due front-end in contemporanea

    Cautelati dal possibile ‘crash’ dell'applicativo e/o dall'utente che dimentica (più o meno volutamente) la sessione aperta in modifica ‘esclusiva’.

    Oltre al campo boolean potresti mettere anche un campo data/ora inizio inserimento : se dopo x tempo la tabella è ancora in modifica consenti agli altri utenti di prenderne il controllo.

  • Re: Inserimento dati in due front-end in contemporanea

    06/02/2024 - max.riservo ha scritto:


    Cautelati dal possibile ‘crash’ dell'applicativo e/o dall'utente che dimentica (più o meno volutamente) la sessione aperta in modifica ‘esclusiva’.

    Oltre al campo boolean potresti mettere anche un campo data/ora inizio inserimento : se dopo x tempo la tabella è ancora in modifica consenti agli altri utenti di prenderne il controllo.

    Ottimo consiglio, grazie1000.

  • Re: Inserimento dati in due front-end in contemporanea

    Scusate se intervengo ma ho lo stesso problema: ho un db diviso in be e vari fe, come posso essere sicura che solo un utente per volta possa inserire nuovi record? con i suggerimenti che avete dato non rimane sempre un incognita: se utA legge se maschera “Tabellainserimento” è libera e si prepara a bloccarla ma prima che la blocchi anche utB legge che “Tabellainserimento” è libera e anche lui vuole bloccarla cosa succede? esiste sempre uno che vince e l'altro che riceve errore? e con quale codice fate questa cosa?

  • Re: Inserimento dati in due front-end in contemporanea

    Uhm… rileggendo mi accorgo solo ora del verbo “inserire”.

    se inserisci un record il problema nasce solo per l'id. lasciate che ad inserirlo sia un trigger del database (anche se autoincrementante non dovrebbe creare problemi a prescindere) inserendo l'id ed eventualmente il blocco fino al post del record.

    altro discorso se si tenta di modificare il record. In questo caso il messaggio lo ricevi all'atto della pressione del tastino “modifica”. Fa il tentativo e se bloccato mandi il messaggio “Un altro utente sta lavorando sul record”. Idem per elimina record.

    in altri termini, se il record è libero lo rilevi all'atto della modifica o dell'eliminazione.

    20/02/2024 - giadal ha scritto:


    se maschera “Tabellainserimento” è libera e si prepara a bloccarla

    nessuno si prepara a bloccarla (non deve esistere un pulsante “blocca record”), appena vai in modifica hai o non hai il messaggio di blocco.

    p.s. non deve esistere neanche una “tabellainserimento” al massimo una tabella dove annoti nometabella, idrecord e ultimamodifica che ti avvisa se il record che stai guardando è stato modificato in modo da refreshare il record. se non vuoi usare un timestamp.

  • Re: Inserimento dati in due front-end in contemporanea

    Grazie x la risposta, ancora qualche dubbio:

    1)

    20/02/2024 - sihsandrea ha scritto:


    se inserisci un record il problema nasce solo per l'id. lasciate che ad inserirlo sia un trigger del database (anche se autoincrementante non dovrebbe creare problemi a prescindere) 

    mi è capitato che se 2 utenti clikkano NuovoRecord (pulsante che carica una form di inserimento che stimola il comando DoCmd.GoToRecord , "", acNewRec) venga assegnato lo stesso ID quindi quando vanno a salvare il record in realtà vengono salvati i dati dell'ultimo utente che salva.

    2)

    20/02/2024 - sihsandrea ha scritto:


    eventualmente il blocco fino al post del record.

    come ottengo questa cosa?

  • Re: Inserimento dati in due front-end in contemporanea

    21/02/2024 - giadal ha scritto:


    come ottengo questa cosa?

    Fino ad ora come hai fatto per bloccarlo e poi sbloccarlo?

    21/02/2024 - giadal ha scritto:


    mi è capitato che se 2 utenti clikkano NuovoRecord (pulsante che carica una form di inserimento che stimola il comando DoCmd.GoToRecord , "", acNewRec) venga assegnato lo stesso ID quindi quando vanno a salvare il record in realtà vengono salvati i dati dell'ultimo utente che salva.

    Beh, il trigger è scritto male…

    Al nuovo record è il db stesso che assegna l'id. Oppure da programma assegni un id? Vanifica il senso del trigger.

  • Re: Inserimento dati in due front-end in contemporanea

    21/02/2024 - sihsandrea ha scritto:


    Fino ad ora come hai fatto per bloccarlo e poi sbloccarlo?

    non l'ho fatto perchè non ho capito come farlo…quando apro la form x inserire un nuovo record chiamo:

    DoCmd.GoToRecord , "", acNewRec

    e appena compilo i campi (che fanno riferimenti alle colonne della tabella) si genera una nuova riga con un id ma se viene fatto in contemporanea da 2 fe si creano 2 righe con stesso id

  • Re: Inserimento dati in due front-end in contemporanea

    La soluzione al tuo problema e' una funzionalita' standard di access ma che deve essere usata ‘esplicitamente’ petche', per sua natura, Access PENSA di essere MONOUTENTE.

    Si chiamera: gestione delle transazioni 

    E' un concetto FONDAMENTALE, presente in TUTTI I DBMS che devono essere utilizzati da piu' persone contemporaneamente.

    NON INVENTARTI soluzioni caserecce: la transazione e' fatta APPOSTA per questi casi

    https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/transaction-statement-microsoft-access-sql

  • Re: Inserimento dati in due front-end in contemporanea

    21/02/2024 - migliorabile ha scritto:


    La soluzione al tuo problema e' una funzionalita' standard di access ma che deve essere usata ‘esplicitamente’ petche', per sua natura, Access PENSA di essere MONOUTENTE.

    Si chiamera: gestione delle transazioni 

    E' un concetto FONDAMENTALE, presente in TUTTI I DBMS che devono essere utilizzati da piu' persone contemporaneamente.

    NON INVENTARTI soluzioni caserecce: la tranasione e' fatta APPOSTA per questi casi

    https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/transaction-statement-microsoft-access-sql

    [+1 +1 +1]

    Chiaramente si deve lavorare con i RS, non con il metodo nativo di Access, e la valorizzazione della PK, nel caso di inserimento anche lato M ed includere il tutto nella transazione, si effettua interrogando con @@IDENTITY il server…, non è semplicissimo per chi è abituato al solo Access, soprattutto se si gestisce anche la parte lato M, che richiede di abbandonare la Sottomaschera ecc…

    Insomma serve ragionarci bene, chi usava il VB6 era scontato muoversi in questo modo ma le facilitazioni native di Access hanno sempre deviato chi non ha solidi i concetti della multiutenza.

  • Re: Inserimento dati in due front-end in contemporanea

    Grazie dei suggerimenti …anche se ci sono cose che non capisco… devo studiare…

    21/02/2024 - @Alex ha scritto:


    si deve lavorare con i RS

    RS sta x recordset?

    21/02/2024 - @Alex ha scritto:


    valorizzazione della PK,

    pk?

    21/02/2024 - @Alex ha scritto:


    lato M, che richiede di abbandonare la Sottomaschera ecc…

    M?…abbandonare la sottomaschera in che senso?

    scusate l'ignoranza…

    se avete qualche esempio chiarificatore delle TRANSACTION vi ringrazio…mentre intanto studio…

Devi accedere o registrarti per scrivere nel forum
35 risposte