Exklusivt lås krävs för att spara designändringar i Access-objekt

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Ursprungligt KB-nummer:   283228

Anteckning

Avancerat: Kräver expertkodning, interoperabilitet och fleranvändarfärdigheter. Den här artikeln gäller endast för Microsoft Access-databaser (.mdb och .accdb).

Symptom

När du försöker anpassa verktygsfält eller öppna ett formulär, en rapport, ett makro eller en modul från Microsoft Access i designvyn får du följande meddelande:

Du har för stunden inte exklusiv åtkomst till databasen. Om du fortsätter att göra ändringar kanske du inte kan spara dem senare.

När du försöker spara designändringar som du har gjort i ett formulär, en rapport, ett makro eller en modul i Access, visas följande meddelande:

Du har för stunden inte exklusiv åtkomst till databasen. Dina designändringar sparas inte.

När du försöker spara en ny dataåtkomstsida visas följande meddelande:

Det gick inte att skapa en länk till den här dataåtkomstsidan eftersom databasen inte kan vara låst exklusivt.

Orsak

  • Du försöker öppna ett formulär, en rapport, ett makro, en modul eller ett kommandofält i designvyn.
  • Du försöker spara designändringar av någon av dessa objekttyper eller en ny sidlänk medan andra användare har samma databas öppen.

För att spara designändringar av dessa objekttyper måste Access kunna erhålla ett exklusivt lås för databasen.

Lösning

I situationer där flera utvecklare skapar ett Access-program samtidigt måste du implementera källkodskontroll med hjälp av tillägget Microsoft Visual SourceSafe för Microsoft Access. Eller så måste du distribuera lokala arbetskopior av databasen till varje utvecklare. En diskussion om vart och ett av de här alternativen följer.

Implementera källkodskontroll

Med Microsoft Access Visual SourceSafe Add-In du placera Access-programmet under källkodskontroll medan det är under utveckling. Om du ställer in programmet under källkodskontroll kan du på så sätt spåra och lagra ändringar som görs i programmet över tid. Med Microsoft Visual SourceSafe kan du granska historiken för ett objekt och sedan återgå till tidigare versioner av ett objekt. Du kan checka ut objekt i Microsoft Access-programmet, ändra dem eller skapa nya objekt i deras lokala kopia och sedan checka in dem i huvuddatabasen under källkodskontroll. Microsoft Access Visual SourceSafe Add-In med XP Developer Microsoft Office. Om du vill använda tillägget Microsoft Access Visual SourceSafe måste du även installera Microsoft Visual SourceSafe, som också är tillgängligt med Microsoft Office XP Developer, separat.

Använda enskilda arbetsdatabaser

Ett annat alternativ som du kan implementera är att behålla en huvudkopia av databasprogrammet på en central plats och sedan använda enskilda arbetskopior av databasen på varje utvecklares dator. Varje utvecklare utvecklar sin del av programmet i den lokala arbetskopian av databasen. När utvecklaren vill göra en ändring på ett objekt i databasprogrammet importerar han eller hon objektet från huvuddatabasen till den lokala arbetsdatabasen. Utvecklaren gör sedan de ändringar som krävs för objektet i den lokala arbetsdatabasen och sparar objektet. När utvecklaren är redo att spara ändringarna i huvuddatabasen exporterar han eller hon objektet till huvuddatabasen och skriver över det ursprungliga objektet.

En nackdel med att använda den här metoden är att det inte går att avgöra om flera utvecklare arbetar samtidigt med samma objekt lokalt. När utvecklaren exporterar objektet till huvuddatabasen kan utvecklaren oavsiktligt skriva över ändringar som en annan utvecklare har gjort i huvuddatabasen.

Mer information

För att spara designändringar för Access-specifika objekt, till exempel formulär, rapporter, nya sidlänkar, makron, moduler och kommandofält, måste Access 2002 kunna låsa databasen enbart under åtgärden Spara. Tabeller, frågor och relationer omfattas inte av den här begränsningen eftersom de är Microsoft Jet-specifika objekt. Microsoft använder det här kravet med Access 2002 av flera orsaker:

  • Det ger konsekvens med andra Visual Basic miljöklientprogram.
  • It stops dependency on the Jet database engine.
  • Det förbättrar stabiliteten för Access-specifika objekt.

Ger konsekvens med andra klientprogram Visual Basic miljön

Eftersom Access 2002 är värd för Visual Basic måste savemodellen som används av Microsoft Access vara konsekvent med andra program som är värd för Visual Basic miljö. I Visual Basic-miljön tillåts endast exklusiv redigering och sparande av Visual Basic projekt som inte är under källkodskontroll. Det här gäller för Visual Basic 6.0 och för alla Office program som är värd för Visual Basic miljö.

Stoppar beroendet på Jet-databasmotorn

I Access kan du skapa Microsoft Access-projektfiler (.adp) och även Microsoft Access-databaser (.mdb). Genom att använda ett Access-projekt kan utvecklare använda Microsoft SQL Server databasmotorn till Microsoft Jet. Tidigare var alla Access-specifika objekt (formulär, rapporter, makron, moduler och kommandofält) beroende av Jet-databasmotorn för lagring. Dessa objekt lagrades i Access-specifika systemtabeller i Microsoft Jet-databasen. Eftersom Access kan använda Microsoft SQL Server som ett alternativ till Microsoft Jet var Microsoft tvungna att utveckla en lagringsmekanism för Access-specifika objekt som inte förlitar sig på Jet-databasmotorn.

Förbättrar stabiliteten för Access-specifika objekt

Med projektlagringsmodellen förbättras stabiliteten för Access-specifika objekt och Visual Basic projekt. Visual Basic for Applications har aldrig tillåtit redigering av flera användare av Visual Basic projekt utan källkodskontroll. Microsoft Access 95 och Microsoft Access 97 kan kringgå denna begränsning genom att dölja projektändringar som gjorts i en miljö med flera användare från Visual Basic for Applications och sedan sammanfoga dem till projektet senare. Detta hade dock en möjlighet att påverka stabiliteten i Visual Basic projekt. Därför kräver Microsoft Access ett exklusivt lås när du skapar Access-specifika objekt för att säkerställa att projektet bara har en redigerare.

Redigera Access-objekt i en miljö med flera användare

Eftersom användare kan öppna en databas för exklusiv eller delad användning beror spara-funktionen som används i Access på hur användaren öppnade databasen och på om flera användare för närvarande använder den.

Om en utvecklare öppnar databasen för exklusiv användning kan utvecklaren spara designen för ett Access-specifikt objekt, förutsatt att utvecklaren kan öppna databasen för läs-/skrivåtkomst och har rätt behörighet att ändra objektets design.

Om en användare öppnar databasen för delad användning kan användaren spara designen för ett Access-specifikt objekt, förutsatt att användaren kan öppna databasen för läs-/skrivåtkomst, har rätt behörigheter för att ändra objektets design och Access kan erhålla ett exklusivt lås för databasen.

Lås kampanj

För att se till att användningen av databasen är exklusiv använder Access anslutningskontrollen i Jet-databasmotorn för att höja användarens delade lås till exklusivt. Access försöker höja ett delat lås till ett exklusivt lås så snart användaren öppnar ett formulär, en rapport, ett makro eller ett kommandofält i designvyn. Access försöker låsa reklam just nu för att förhindra scenariot där en användare har gjort flera designändringar för att senare kunna se att användaren inte kan spara dem eftersom Access inte kan erhålla ett exklusivt lås. Genom att försöka låsa kampanjen så fort användaren öppnar ett objekt i designvyn kan Access varna användaren om det inte går att skaffa ett exklusivt lås innan användaren gör några designändringar. Access kommer inte att försöka låsa kampanjen när du öppnar en modul i designvyn. Men den kommer att försöka låsa kampanjen så snart användaren redigerar en modul i databasen.

Access behåller det exklusiva låset tills användaren sparar eller tar bort alla nedsmutsade objekt och inga andra objekt är öppna i designvyn. Därefter nedgraderar Access låset till delat om databasen ursprungligen öppnades för delad användning.

Om Access inte höja låset till exklusivt när användaren öppnar ett objekt i designvyn får användaren ett meddelande av Access:

Du har för stunden inte exklusiv åtkomst till databasen. Om du fortsätter att göra ändringar kanske du inte kan spara dem senare.

Efter det här varningsmeddelandet öppnas objektet i designvyn i Access och användaren kan göra designändringar. Om användaren försöker spara objektet försöker Access höja det delade låset till exklusivt. Om du lyckas låsa kampanjen sparas objektet i Access och det exklusiva låset behålls tills användaren sparar eller tar bort alla andra nedsmutsade objekt och inget objekt förblir öppet i designvyn. Om låskampanjen misslyckas får användaren följande meddelande:

Du har för stunden inte exklusiv åtkomst till databasen. Dina designändringar sparas inte.

Om användaren försöker stänga det ändrade objektet och spara ändringarna tillfrågas användaren om han eller hon kan välja att stänga objektet och ta bort designändringar som gjorts, eller låta det vara öppet och inte sparat.

Steg för att återskapa beteendet

  1. Starta två instanser av Microsoft Access på samma dator.

  2. Öppna exempeldatabasen Northwind.mdb i båda instanserna.

  3. Öppna formuläret Kunder i designvyn i den första instansen av Microsoft Access.

    Du får meddelandet:

    Du har för stunden inte exklusiv åtkomst till databasen. Om du fortsätter att göra ändringar kanske du inte kan spara dem senare.

  4. Klicka på OK för att ta bort meddelandet.

    Formuläret öppnas i designvyn.

  5. Lägga till en textrruta i formuläret.

  6. Klicka på SparaArkiv-menyn.

    Du får följande meddelande:

    Du har för stunden inte exklusiv åtkomst till databasen. Dina designändringar sparas inte.

  7. Klicka på OK för att ta bort meddelandet.

  8. Stäng den andra förekomsten av Access på datorn.

  9. Försök att spara formuläret igen i den första Access-instansen.

    Formuläret sparas.