Share via


Il blocco esclusivo è necessario per salvare le modifiche di progettazione agli oggetti di Access

Numero KB originale: 283228

Nota

Avanzate: richiede competenze esperte di codifica, interoperabilità e multiutente. Questo articolo si applica solo a un database di Microsoft Access (.mdb e accdb).

Sintomi

Quando si tenta di personalizzare le barre degli strumenti o aprire una maschera, un report, una macro o un modulo di Microsoft Access in visualizzazione Progettazione, viene visualizzato il messaggio seguente:

Al momento non si dispone dell'accesso esclusivo al database. Se si procede con l'apportare modifiche, potrebbe non essere possibile salvarle in un secondo momento.

Quando si tenta di salvare le modifiche alla progettazione apportate a una maschera, un report, una macro o un modulo di Access, viene visualizzato il messaggio seguente:

Al momento non si dispone dell'accesso esclusivo al database. Le modifiche alla progettazione non verranno salvate.

Quando si tenta di salvare una nuova pagina di accesso ai dati, viene visualizzato il messaggio seguente:

Impossibile creare un collegamento a questa pagina di accesso ai dati perché il database non può essere bloccato esclusivamente.

Causa

  • Si sta tentando di aprire una maschera, un report, una macro, un modulo o una barra dei comandi nella visualizzazione Struttura.
  • Si sta tentando di salvare le modifiche di progettazione in uno di questi tipi di oggetto o in un nuovo collegamento di pagina mentre altri utenti hanno aperto lo stesso database.

Per salvare le modifiche di progettazione a questi tipi di oggetto, Access deve essere in grado di ottenere un blocco esclusivo nel database.

Risoluzione

Nelle situazioni in cui più sviluppatori progettano un'applicazione Access contemporaneamente, è necessario implementare il controllo del codice sorgente usando il componente aggiuntivo Microsoft Visual SourceSafe per Microsoft Access. In alternativa, è necessario distribuire copie di lavoro locali del database a ogni sviluppatore. Di seguito viene visualizzata una descrizione di ognuna di queste opzioni.

Implementazione del controllo del codice sorgente

Il Visual SourceSafe Add-In di Microsoft Access consente di inserire l'applicazione Access sotto il controllo del codice sorgente mentre è in fase di sviluppo. Se si inserisce l'applicazione sotto il controllo del codice sorgente, ciò consente di tenere traccia e archiviare le modifiche apportate all'applicazione nel tempo. Usando Microsoft Visual SourceSafe, è possibile esaminare la cronologia di un oggetto e quindi ripristinare le versioni precedenti di un oggetto. È possibile estrarre gli oggetti nell'applicazione Microsoft Access, modificarli o creare nuovi oggetti nella copia locale e quindi archiviarli di nuovo nel database principale sotto il controllo del codice sorgente. Microsoft Access Visual SourceSafe Add-In è disponibile con Microsoft Office XP Developer. Per usare il componente aggiuntivo Visual SourceSafe di Microsoft Access, è necessario installare anche Microsoft Visual SourceSafe, disponibile anche con Microsoft Office XP Developer, separatamente.

Uso di singoli database di lavoro

Un'altra opzione che è possibile implementare consiste nel mantenere una copia master dell'applicazione di database in una posizione centralizzata e quindi usare singole copie di lavoro del database nel computer di ogni sviluppatore. Ogni sviluppatore sviluppa una singola parte dell'applicazione nella copia di lavoro locale del database. Quando gli sviluppatori vogliono apportare una modifica a un oggetto nell'applicazione di database, importano l'oggetto dal database master nel database di lavoro locale. Gli sviluppatori apportano quindi le modifiche necessarie all'oggetto nel database di lavoro locale e salvano l'oggetto . Quando gli sviluppatori sono pronti per eseguire il commit delle modifiche nel database master, esportano l'oggetto nel database master sovrascrivendo l'oggetto originale.

Uno svantaggio dell'uso di questo approccio è che non esiste alcun modo per determinare se più sviluppatori lavorano contemporaneamente sullo stesso oggetto in locale. Quando lo sviluppatore esporta l'oggetto nel database master, lo sviluppatore può sovrascrivere inconsapevolmente le modifiche di cui un altro sviluppatore ha eseguito il commit nel database master.

Ulteriori informazioni

Per salvare le modifiche di progettazione agli oggetti specifici di Access, ad esempio maschere, report, nuovi collegamenti di pagina, macro, moduli e barre dei comandi, Access 2002 deve essere in grado di bloccare il database esclusivamente durante l'operazione di salvataggio . Le tabelle, le query e le relazioni non rientrano in questa restrizione perché sono oggetti specifici di Microsoft Jet. Microsoft usa questo requisito con Access 2002 per diversi motivi:

  • Fornisce coerenza con altre applicazioni client di Visual Basic Environment.
  • Interrompe la dipendenza dal motore di database Jet.
  • Migliora la stabilità degli oggetti specifici di Access.

Fornisce coerenza con altre applicazioni client dell'ambiente Visual Basic

Poiché Access 2002 ospita l'ambiente Visual Basic, il modello di salvataggio usato da Microsoft Access deve essere coerente con altre applicazioni che ospitano l'ambiente Visual Basic. L'ambiente Visual Basic consente solo la modifica e il salvataggio esclusivi di progetti di Visual Basic che non sono sotto il controllo del codice sorgente. Questo vale per Visual Basic 6.0 e anche per tutte le applicazioni di Office che ospitano l'ambiente Visual Basic.

Arresta la dipendenza dal motore di database Jet

Access offre la possibilità di creare file di progetto di Microsoft Access (con estensione adp) e anche database di Microsoft Access (.mdb). Usando un progetto di Access, gli sviluppatori possono usare Microsoft SQL Server come altro motore di database per Microsoft Jet. In passato, tutti gli oggetti specifici di Access (maschere, report, macro, moduli e barre dei comandi) dipendevano dal motore di database Jet per l'archiviazione. Questi oggetti sono stati archiviati in tabelle di sistema specifiche di Access nel database Microsoft Jet. Poiché è possibile che Access usi Microsoft SQL Server come alternativa a Microsoft Jet, Microsoft ha dovuto sviluppare un meccanismo di archiviazione per gli oggetti specifici di Access che non si basa sul motore di database Jet.

Migliora la stabilità degli oggetti specifici di Access

Il modello di archiviazione del progetto migliora la stabilità degli oggetti specifici di Access e del progetto Visual Basic. Visual Basic, Applications Edition non ha mai consentito la modifica di più utenti di progetti Visual Basic senza il controllo del codice sorgente. Microsoft Access 95 e Microsoft Access 97 potrebbero aggirare questa restrizione nascondendo le modifiche apportate al progetto in un ambiente multiuteto da Visual Basic, Applications Edition e quindi unendole al progetto in un secondo momento. Ciò ha tuttavia il potenziale per influire sulla stabilità del progetto Visual Basic. Di conseguenza, Microsoft Access richiede un blocco esclusivo durante la progettazione di oggetti specifici di Access per assicurarsi che il progetto disponga di un solo editor.

Modifica degli oggetti accessi in un ambiente multiute utente

Poiché gli utenti possono aprire un database per uso esclusivo o condiviso, il comportamento di salvataggio mostrato da Access dipende dal modo in cui l'utente ha aperto il database e dal fatto che più utenti vi accedano.

Se uno sviluppatore apre il database per l'uso esclusivo, lo sviluppatore può salvare la progettazione di qualsiasi oggetto specifico di Access, a condizione che lo sviluppatore possa aprire il database per l'accesso in lettura/scrittura e disponga delle autorizzazioni corrette per modificare la progettazione dell'oggetto.

Se un utente apre il database per l'uso condiviso, l'utente può salvare la progettazione di qualsiasi oggetto specifico di Access, a condizione che l'utente possa aprire il database per l'accesso in lettura/scrittura, abbia le autorizzazioni corrette per modificare la progettazione dell'oggetto e Access possa ottenere un blocco esclusivo sul database.

Promozione blocco

Per assicurarsi che l'uso del database sia esclusivo, Access usa la funzionalità di controllo della connessione del motore di database Jet per alzare di livello il blocco condiviso dell'utente in esclusivo. Access tenta di alzare di livello un blocco condiviso a un blocco esclusivo non appena l'utente apre una maschera, un report, una macro o una barra dei comandi nella visualizzazione Struttura. L'accesso tenta di bloccare l'innalzamento di livello in questo momento per impedire lo scenario in cui un utente ha apportato più modifiche alla progettazione solo per individuare in un secondo momento che l'utente non può salvarle perché Access non può ottenere un blocco esclusivo. Provando a bloccare l'innalzamento di livello non appena l'utente apre un oggetto in visualizzazione Progettazione, Access può avvisare l'utente se non riesce a ottenere un blocco esclusivo prima che l'utente apporvi modifiche di progettazione. L'accesso non tenterà di bloccare l'innalzamento di livello all'apertura di un modulo nella visualizzazione Progettazione; tuttavia, proverà a bloccare l'innalzamento di livello non appena l'utente modifica qualsiasi modulo nel database.

Access mantiene il blocco esclusivo fino a quando l'utente non salva o elimina tutti gli oggetti dirty e nessun altro oggetto è aperto in visualizzazione Progettazione. In seguito, Access abbassa di nuovo il blocco a condiviso se il database è stato originariamente aperto per l'uso condiviso.

Se Access non è in grado di alzare di livello il blocco in modalità esclusiva quando l'utente apre un oggetto in visualizzazione Progettazione, Access avvisa l'utente con il messaggio:

Al momento non si dispone dell'accesso esclusivo al database. Se si procede con l'apportare modifiche, potrebbe non essere possibile salvarle in un secondo momento.

Dopo questo messaggio di avviso, Access aprirà l'oggetto in visualizzazione Struttura e consentirà all'utente di apportare modifiche alla progettazione. Se l'utente tenta di salvare l'oggetto, Access tenta di alzare di livello il blocco condiviso in esclusivo. Se l'innalzamento di livello del blocco ha esito positivo, Access salva l'oggetto e mantiene il blocco esclusivo fino a quando l'utente non salva o elimina tutti gli altri oggetti dirty e nessun oggetto rimane aperto nella visualizzazione Struttura. Se l'innalzamento di livello del blocco non riesce, l'utente riceve il messaggio seguente:

Al momento non si dispone dell'accesso esclusivo al database. Le modifiche alla progettazione non verranno salvate.

Se l'utente tenta di chiudere l'oggetto dirty e salvare le modifiche, Access chiede all'utente di chiudere l'oggetto e rimuovere le modifiche di progettazione apportate o di lasciarlo aperto e non salvato.

Passaggi per riprodurre il comportamento

  1. Avviare due istanze di Microsoft Access nello stesso computer.

  2. Aprire il Northwind.mdb di database di esempio in entrambe le istanze.

  3. Nella prima istanza di Microsoft Access aprire il modulo Clienti in visualizzazione Progettazione .

    Si riceve il messaggio:

    Al momento non si dispone dell'accesso esclusivo al database. Se si procede con l'apportare modifiche, potrebbe non essere possibile salvarle in un secondo momento.

  4. Fare clic su OK per cancellare il messaggio.

    La maschera viene visualizzata in visualizzazione Struttura .

  5. Aggiungere un controllo casella di testo al modulo.

  6. Scegliere Salva dal menu File.

    Viene visualizzato il messaggio seguente:

    Al momento non si dispone dell'accesso esclusivo al database. Le modifiche alla progettazione non verranno salvate.

  7. Fare clic su OK per cancellare il messaggio.

  8. Chiudere la seconda istanza di Access nel computer.

  9. Nella prima istanza di Access provare a salvare di nuovo il modulo.

    Il modulo viene salvato correttamente.