Quale evento per record bloccato

di il
4 risposte

Quale evento per record bloccato

Ho un db diviso in fe e be, sono su una maschera con BloccaRecord=RecordModificati così se un fe sta modificando l'altro fe non riesce. Il mio problema è che il secondo fe non riesce a modificare ma non ho errore, quale evento posso intercettare x dare un messaggio ? 

4 Risposte

  • Re: Quale evento per record bloccato

    Se pensi di ricevere un Feedback automatico, la risposta è NO finchè non generi l'azione in Conflitto.

    Per l'azione da generare, basta forzare un Edit ed intercettare l'errore, oppure forzare un Salva ed intercettare l'errore… io onestamente lavorerei sul RecordsetClone, farei un tentativo di EDIT solo finalizzato al check e, se da errore un'altro utente sta Bloccando, quindi rollback e chiudi la transazione, se bloccato inibisci l'EDIT.

    Per l'inserimento di una PK Duplicata, viene generato Errore 3022 su Evento Form Error:

    Const conDuplicateKey = 3022
    
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
        Const conDuplicateKey = 3022
        Dim strMsg As String
    
        If DataErr = conDuplicateKey Then
            Response = acDataErrContinue
            strMsg = "Each employee record must have a unique " _
                & "employee ID number. Please recheck your data."
            MsgBox strMsg
        End If
    End Sub

    Se non erro, ma devi provare il Blocco Record genera il [3218]… fai qualche prova…

    Leggi questo:

    https://stackoverflow.com/questions/44827351/instantly-locking-a-record-in-multi-user-access-environment

    https://www.experts-exchange.com/articles/25780/Handle-concurrent-update-conflicts-in-Access-silently.html

    P.S. Fai attenzione che il Blocco non agisce a livello di SINGOLO RECORD… anche su questo fai quelche prova.

  • Re: Quale evento per record bloccato

    Ho messo una msgbox su 

    Private Sub Form_Error(DataErr As Integer, Response As Integer)

    ma quando edito un campo mentre un altro fe sta modificando non entro in questa routine…non si genera un errore, solo non modifica allora volevo capire se posso intercettare la cosa, l'unica cosa che accade è il beep del pc, non vedo neanche l'icona di blocco…

  • Re: Quale evento per record bloccato

    Ti ho spiegato come “PREVENIRLA”… segui quella strada, puoi intercettare SOLO la violazione di PK.

  • Re: Quale evento per record bloccato

    28/02/2024 - giadal ha scritto:


    Ho messo una msgbox su 

    Private Sub Form_Error(DataErr As Integer, Response As Integer)

    ma quando edito un campo mentre un altro fe sta modificando non entro in questa routine…non si genera un errore, solo non modifica allora volevo capire se posso intercettare la cosa, l'unica cosa che accade è il beep del pc, non vedo neanche l'icona di blocco…

    se hai bloccato il record per definizione non puoi operare sul record finchè non si rilascia il record. vale per la modifica e vale per l'insert in quanto sembra che il blocco, in access, opera su tutta la tabella (e non so se opera anche sulle tabelle collegate), pertanto non puoi generare un errore di duplicazione chiave (come da te riscontrato: Il mio problema è che il secondo fe non riesce a modificare ma non ho errore, quale evento posso intercettare x dare un messaggio ?), saltando di fatto (se non rendendola inutile) l'istruzione del messaggio di errore.

    domanda: come hai bloccato il record? il web è stracolmo di questa problematica, suggerendo di avviare una query di update per bloccare il record lato 1 o i record lato molti con un flag (spesso identificati da username).

    questo ti permette di inserire il record ma devi fare attenzione affinchè il la chiave non sia duplicata; in questo caso l'esempio di alex ha senso. l'utente A inserisce il record 30 e lo blocca, l'utente B non puo' modificarlo perchè il flag non è NULL, l'utente C prova ad inserire il record 30 (puo' tentare di farlo perchè la tabella non è bloccata) ma riceve l'errore di violazione di chiave e può scegliere, tramite messaggio, se annullare l'inserimento o incrementare il valore della chiave per inserire un altro record.

    Adesso la risposta alla tua domanda nel caso di modifica contemporanea: se flaf not null allora messaggio “pippo o un altro utente sta lavorando sul record, vuoi attendere che finisca? [si] [no]” altrimenti (nessun flag) lacia query di blocco (update … flag=[pippo]) e vai in edit.

Devi accedere o registrarti per scrivere nel forum
4 risposte