Problemi apertura maschera - accesso esclusivo - errore runtime 3008

di ocrot il
7 risposte
Buongiorno,

vorrei chiedervi una mano su una cosa che mi sta facendo impazzire

semplicemente ho due maschere, con un bottone chiudo la maschera attuale ed apro una nuova, ma ricevo un problema di accesso esclusivo

ho provato ad inserire anche un controllo se la maschera uno e' aperta ed un DoEvents in mezzo

DoCmd.Close acForm, "m_UNO"

DoEvents

If CurrentProject.AllForms("m_UNO").IsLoaded Then
     Else
                  DoCmd.OpenForm "m_DUE"
End If

premetto che ho fatto anche la prova ad avere aperte solo quelle due maschere, sono sicuro quindi che non ci sia altro

come dicevo ricevo un errore runtime 3008 dove la tabella di appoggio è gia' aperta in via esclusiva

se fisicamente chiudo la maschera UNO ed apro la DUE (non da codice quindi) nessun problema

ho provato anche una compattazione e ripristino, senza risultato, ho anche chiuso e riaperto il database piu' volte

cosa puo' essere?

7 Risposte

  • Prova a leggere fra questi link dove si parla dell'errore Runtime 3008
    http://www.vbaexpress.com/forum/showthread.php?24330-Solved-RunTime-error-3008
    https://www.experts-exchange.com/questions/26177575/Access-Run-Time-Error-3008.html
    http://www.utteraccess.com/forum/Runtime-Error-3008-t1712295.html
    https://microsoft.public.it.office.access.narkive.com/A0o27Yzt/errore-di-run-time-3008
    https://bytes.com/topic/access/answers/961082-run-time-error-3008-a
  • Grazie Osvaldo,
    ma non apro Recordset, le maschere sono generate da query di access,
    ho provato anche a forzare la chiusura della query
    DoCmd.Close acQuery, "q_nome_query"

    ma nulla
  • Se su Click da Form(A) vuoi aprire la Form(B) e chiudere la Form(A) e viceversa... la cosa è semplice...!
    
    Docmd.OpenForm "B"
    Docmd.Close acForm,Me.Name
    
    Nella Form B ovviamente sarà
    
    Docmd.OpenForm "A"
    Docmd.Close acForm,Me.Name
    
    DoEvents messo li non serve a nulla..., come non serve a nulla controllare se la maschera da cui parte il codice è aperta... ovvio che lo è...
  • Ciao,

    anche
    cambiando da

    DoCmd.Close acForm, "m_UNO"
    DoCmd.Close acForm, Me.Name

    ho sempre il problema dell'errore runtime 3008

    il controllo Is loaded l'ho inserito per capire se effettivamente e' chiusa, e' chiaro che lo e' (entra nell'if) ma non funge,

    con il codice vba del pulsante chiudo una maschera con Docmd.Close e ne apro un'altra con Docmd.Close ma ho sempre errore di runtime 3008

    errore che non si presenta se chiudo invece la maschera con la X e apro l'altra maschera manualmente
  • Ciao a tutti,
    ho risolto impostando la proprietà della maschera Tiporecordset su Snapshot,

    ma sinceramente non ho capito ancora il motivo perche' non funziona in Dynaset se la maschera e' comunque chiusa
  • ocrot ha scritto:


    Ciao a tutti,
    ho risolto impostando la proprietà della maschera Tiporecordset su Snapshot,
    ma sinceramente non ho capito ancora il motivo perche' non funziona in Dynaset se la maschera e' comunque chiusa
    La spiegazione è semplice:

    RecordsetType Property
    L'errore 3008 riporta la descrizione di "accesso esclusivo". Con il recordset Snapshot non puoi metter mano ai dati dei controlli associati quindi non c'è alcun conflitto di "accesso esclusivo".
    Un'altra proprietà della maschera sulla quale puntare l'attenzione è "Blocco record". In una delle due maschere, o in entrambe, probabilmente hai "Tutti i record".
    Vedi ora se è più giusto aver modificato il tipo Recordset o intervenire sul "Blocco record".
  • Philcattivocarattere ha scritto:


    ocrot ha scritto:


    Ciao a tutti,
    ho risolto impostando la proprietà della maschera Tiporecordset su Snapshot,
    ma sinceramente non ho capito ancora il motivo perche' non funziona in Dynaset se la maschera e' comunque chiusa
    La spiegazione è semplice:

    RecordsetType Property
    L'errore 3008 riporta la descrizione di "accesso esclusivo". Con il recordset Snapshot non puoi metter mano ai dati dei controlli associati quindi non c'è alcun conflitto di "accesso esclusivo".
    Un'altra proprietà della maschera sulla quale puntare l'attenzione è "Blocco record". In una delle due maschere, o in entrambe, probabilmente hai "Tutti i record".
    Vedi ora se è più giusto aver modificato il tipo Recordset o intervenire sul "Blocco record".
    perfetto, concordo in tutto ma perche' se su un pulsante ho questo codice
    DoCmd.Close acForm, "m_UNO"
    DoCmd.OpenForm "m_DUE"

    ho l'errore di runtime 3008? anche se la maschera m_UNO e' stata chiusa e quindi non ha piu' l'accesso esclusivo e dovrebbe aver liberato la tabella?

    successivamente ho fatto la prova di lasciare solo sul pulsante
    DoCmd.Close acForm, "m_UNO"

    la maschera viene chiusa e con un altro pulsante su una maschera vuota ho
    DoCmd.OpenForm "m_DUE"

    non ho nessun problema di accesso esclusivo


    ho controllato anche il RecordLocks,
    nella prima nessun blocco
    nella seconda tutti i record
Devi accedere o registrarti per scrivere nel forum
7 risposte