Exclusieve vergrendeling is vereist voor het opslaan van ontwerpwijzigingen in Access-objecten

Origineel KB-nummer: 283228

Opmerking

Geavanceerd: vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers. Dit artikel is alleen van toepassing op een Microsoft Access-database (.mdb en .accdb).

Symptomen

Wanneer u werkbalken probeert aan te passen of een Microsoft Access-formulier, -rapport, -macro of -module probeert te openen in de ontwerpweergave, ontvangt u het volgende bericht:

U hebt momenteel geen exclusieve toegang tot de database. Als u verdergaat met het aanbrengen van wijzigingen, kunt u deze later mogelijk niet meer opslaan.

Wanneer u ontwerpwijzigingen probeert op te slaan die u hebt aangebracht in een Access-formulier, -rapport, -macro of -module, ontvangt u het volgende bericht:

U hebt momenteel geen exclusieve toegang tot de database. Uw ontwerpwijzigingen worden niet opgeslagen.

Wanneer u een nieuwe Data Access-pagina probeert op te slaan, ontvangt u het volgende bericht:

Er kan geen koppeling naar deze Data Access-pagina worden gemaakt omdat de database niet uitsluitend kan worden vergrendeld.

Oorzaak

  • U probeert een formulier, rapport, macro, module of opdrachtbalk te openen in de ontwerpweergave.
  • U probeert ontwerpwijzigingen op te slaan in een van deze objecttypen of een nieuwe paginakoppeling terwijl andere gebruikers dezelfde database hebben geopend.

Als u ontwerpwijzigingen in deze objecttypen wilt opslaan, moet Access een exclusieve vergrendeling voor de database kunnen verkrijgen.

Oplossing

In situaties waarin meerdere ontwikkelaars tegelijkertijd een Access-toepassing ontwerpen, moet u broncodebeheer implementeren met behulp van de Microsoft Visual SourceSafe-invoegtoepassing voor Microsoft Access. Of u moet lokale werkende kopieën van de database distribueren naar elke ontwikkelaar. Een bespreking van elk van deze opties volgt.

Broncodebeheer implementeren

Met de Microsoft Access-Visual SourceSafe Add-In kunt u uw Access-toepassing onder broncodebeheer plaatsen terwijl deze in ontwikkeling is. Als u uw toepassing onder broncodebeheer plaatst, kunt u hiermee wijzigingen bijhouden en opslaan die in de loop van de tijd in uw toepassing worden aangebracht. Met behulp van Microsoft Visual SourceSafe kunt u de geschiedenis van een object bekijken en vervolgens terugkeren naar eerdere versies van een object. U kunt objecten uitchecken in de Microsoft Access-toepassing, deze wijzigen of nieuwe objecten maken in hun lokale kopie en ze vervolgens weer in de hoofddatabase controleren onder broncodebeheer. De Microsoft Access-Visual SourceSafe Add-In is beschikbaar voor Microsoft Office XP Developer. Als u de Microsoft Access Visual SourceSafe-invoegtoepassing wilt gebruiken, moet u ook Microsoft Visual SourceSafe, dat ook beschikbaar is voor Microsoft Office XP Developer, afzonderlijk installeren.

Afzonderlijke werkdatabases gebruiken

Een andere optie die u kunt implementeren, is om een hoofdkopie van de databasetoepassing op een centrale locatie te bewaren en vervolgens afzonderlijke werkende kopieën van de database op de computer van elke ontwikkelaar te gebruiken. Elke ontwikkelaar zou een afzonderlijk deel van de toepassing ontwikkelen in de lokale werkende kopie van de database. Wanneer de ontwikkelaars een wijziging willen aanbrengen in een object in de databasetoepassing, importeren ze het object uit de hoofddatabase in de lokale werkende database. Vervolgens zouden de ontwikkelaars de vereiste wijzigingen aanbrengen in het object in de lokale werkdatabase en het object opslaan. Wanneer de ontwikkelaars klaar zijn om de wijzigingen door te voeren in de hoofddatabase, exporteren ze het object naar de hoofddatabase en overschrijven ze het oorspronkelijke object.

Een nadeel van het gebruik van deze benadering is dat er geen manier is om te bepalen of meerdere ontwikkelaars tegelijkertijd lokaal aan hetzelfde object werken. Wanneer de ontwikkelaar het object exporteert naar de hoofddatabase, kan de ontwikkelaar onbewust wijzigingen overschrijven die een andere ontwikkelaar heeft doorgevoerd in de hoofddatabase.

Meer informatie

Als u ontwerpwijzigingen wilt opslaan in Access-specifieke objecten, zoals formulieren, rapporten, nieuwe paginakoppelingen, macro's, modules en opdrachtbalken, moet Access 2002 de database exclusief kunnen vergrendelen tijdens de bewerking Opslaan . Tabellen, query's en relaties vallen niet onder deze beperking omdat het Microsoft Jet-specifieke objecten zijn. Microsoft gebruikt deze vereiste voor Access 2002 om verschillende redenen:

  • Het biedt consistentie met andere Visual Basic Environment-clienttoepassingen.
  • Hiermee wordt de afhankelijkheid van de Jet-database-engine gestopt.
  • Het verbetert de stabiliteit van Access-specifieke objecten.

Biedt consistentie met andere Visual Basic-omgevingsclienttoepassingen

Omdat Access 2002 als host fungeert voor de Visual Basic-omgeving, moet het opslagmodel dat wordt gebruikt door Microsoft Access consistent zijn met andere toepassingen die als host fungeren voor de Visual Basic-omgeving. De Visual Basic-omgeving staat alleen het exclusief bewerken en opslaan van Visual Basic-projecten toe die niet onder broncodebeheer vallen. Dit geldt voor Visual Basic 6.0 en ook voor alle Office-toepassingen die als host fungeren voor de Visual Basic-omgeving.

Stopt de afhankelijkheid van de Jet-database-engine

Access biedt de mogelijkheid om Microsoft Access-projectbestanden (.adp) en ook Microsoft Access-databases (.mdb) te maken. Door een Access-project te gebruiken, kunnen ontwikkelaars Microsoft SQL Server gebruiken als een andere database-engine voor Microsoft Jet. In het verleden waren alle access-specifieke objecten (formulieren, rapporten, macro's, modules en opdrachtbalken) afhankelijk van de Jet-database-engine voor opslag. Deze objecten zijn opgeslagen in Access-specifieke systeemtabellen in de Microsoft Jet-database. Omdat het mogelijk is dat Access Microsoft SQL Server gebruikt als alternatief voor Microsoft Jet, moest Microsoft een opslagmechanisme ontwikkelen voor Access-specifieke objecten dat niet afhankelijk is van de Jet-database-engine.

Verbetert de stabiliteit van Access-specifieke objecten

Het projectopslagmodel verbetert de stabiliteit van Access-specifieke objecten en het Visual Basic-project. Visual Basic for Applications heeft het bewerken van Visual Basic-projecten voor meerdere gebruikers nooit toegestaan zonder broncodebeheer. Microsoft Access 95 en Microsoft Access 97 kunnen deze beperking omzeilen door projectwijzigingen die in een omgeving met meerdere gebruikers zijn aangebracht, te verbergen in Visual Basic for Applications en deze later samen te voegen in het project. Dit kan echter de stabiliteit van het Visual Basic-project beïnvloeden. Daarom vereist Microsoft Access een exclusieve vergrendeling bij het ontwerpen van Access-specifieke objecten om ervoor te zorgen dat het project slechts één editor heeft.

Access-objecten bewerken in een omgeving met meerdere gebruikers

Omdat gebruikers een database kunnen openen voor exclusief of gedeeld gebruik, hangt het gedrag van Access voor opslaan af van hoe de gebruiker de database heeft geopend en of meerdere gebruikers deze momenteel openen.

Als een ontwikkelaar de database opent voor exclusief gebruik, kan de ontwikkelaar het ontwerp van elk Access-specifiek object opslaan, mits de ontwikkelaar de database kan openen voor lees-/schrijftoegang en over de juiste machtigingen beschikt om het ontwerp van het object te wijzigen.

Als een gebruiker de database opent voor gedeeld gebruik, kan de gebruiker het ontwerp van elk Access-specifiek object opslaan, mits de gebruiker de database kan openen voor lees-/schrijftoegang, de juiste machtigingen heeft om het ontwerp van het object te wijzigen en Access een exclusieve vergrendeling op de database kan verkrijgen.

Promotie vergrendelen

Om ervoor te zorgen dat het gebruik van de database exclusief is, gebruikt Access de functie voor verbindingsbeheer van de Jet-database-engine om de gedeelde vergrendeling van de gebruiker te promoveren tot exclusief. Access probeert een gedeelde vergrendeling te promoveren naar een exclusieve vergrendeling zodra de gebruiker een formulier, rapport, macro of opdrachtbalk opent in de ontwerpweergave. Access probeert promotie op dit moment te vergrendelen om te voorkomen dat het scenario waarin een gebruiker meerdere ontwerpwijzigingen heeft aangebracht om later te ontdekken dat de gebruiker deze niet kan opslaan omdat Access geen exclusieve vergrendeling kan verkrijgen. Door de promotie te vergrendelen zodra de gebruiker een object opent in de ontwerpweergave, kan Access de gebruiker waarschuwen als deze geen exclusieve vergrendeling kan verkrijgen voordat de gebruiker ontwerpwijzigingen aanbrengt. De promotie wordt niet vergrendeld bij het openen van een module in de ontwerpweergave. Er wordt echter geprobeerd de promotie te vergrendelen zodra de gebruiker een module in de database bewerkt.

Access behoudt de exclusieve vergrendeling totdat de gebruiker alle vuile objecten opslaat of verwijdert en er geen andere objecten zijn geopend in de ontwerpweergave. Hierna wordt de vergrendeling terug verlaagd naar gedeeld als de database oorspronkelijk is geopend voor gedeeld gebruik.

Als access de vergrendeling niet kan verhogen tot exclusief wanneer de gebruiker een object opent in de ontwerpweergave, wordt de gebruiker gewaarschuwd met het bericht:

U hebt momenteel geen exclusieve toegang tot de database. Als u verdergaat met het aanbrengen van wijzigingen, kunt u deze later mogelijk niet meer opslaan.

Na dit waarschuwingsbericht wordt het object geopend in de ontwerpweergave en kan de gebruiker ontwerpwijzigingen aanbrengen. Als de gebruiker het object probeert op te slaan, probeert Access de gedeelde vergrendeling te promoveren naar exclusief. Als de vergrendelingspromotie is geslaagd, slaat Access het object op en behoudt de exclusieve vergrendeling totdat de gebruiker alle andere vuile objecten opslaat of verwijdert en er geen object open blijft in de ontwerpweergave. Als de vergrendelingspromotie mislukt, ontvangt de gebruiker het volgende bericht:

U hebt momenteel geen exclusieve toegang tot de database. Uw ontwerpwijzigingen worden niet opgeslagen.

Als de gebruiker het vuile object probeert te sluiten en wijzigingen op te slaan, vraagt Access de gebruiker de optie om het object te sluiten en ontwerpwijzigingen te negeren, of met de optie om het geopend en niet-opgeslagen te laten.

Stappen voor het reproduceren van het gedrag

  1. Start twee exemplaren van Microsoft Access op dezelfde computer.

  2. Open de voorbeelddatabase Northwind.mdb in beide exemplaren.

  3. Open in de eerste instantie van Microsoft Access het formulier Klanten in de ontwerpweergave .

    U ontvangt het bericht:

    U hebt momenteel geen exclusieve toegang tot de database. Als u verdergaat met het aanbrengen van wijzigingen, kunt u deze later mogelijk niet meer opslaan.

  4. Klik op OK om het bericht te wissen.

    Het formulier wordt geopend in de ontwerpweergave .

  5. Voeg een besturingselement tekstvak toe aan het formulier.

  6. Klik in het menu Bestand op Opslaan.

    U ontvangt het volgende bericht:

    U hebt momenteel geen exclusieve toegang tot de database. Uw ontwerpwijzigingen worden niet opgeslagen.

  7. Klik op OK om het bericht te wissen.

  8. Sluit het tweede exemplaar van Access op uw computer.

  9. In het eerste geval van Access probeert u het formulier opnieuw op te slaan.

    Het formulier is opgeslagen.