Exclusive lock is required for saving design changes to Access objects in Access 2002 (283228)
The information in this article applies to:
This article was previously published under Q283228 Advanced: Requires expert coding, interoperability, and multiuser
skills. This article applies only to a Microsoft Access database (.mdb).
For a Microsoft Access 2000 version of this article,
see
200290. SYMPTOMS When you try to customize toolbars or open a Microsoft
Access form, report, macro, or module in Design view, you receive the following
message: You do not have exclusive access to the
database at this time. If you proceed to make changes, you may not be able to
save them later. When you try to save design changes that you made
to an Access form, report, macro, or module, you receive the following message:
You do not have exclusive access to the database at this
time. Your design changes will not be saved. When you try to save a
new data access page, you receive the following message:
A link to this data access page could not be created because the database
cannot be exclusively locked. CAUSE You are trying to open a form, report, macro, module, or
commandbar in Design view, or you are trying to save design changes to one of
these object types or a new page link while other users have the same database
open. To save design changes to these object types, Access must be able to
obtain an exclusive lock on the database. RESOLUTION In situations where multiple developers are designing an
Access application simultaneously, you must implement source code control by
using the Microsoft Visual SourceSafe Add-in for Microsoft Access. Or you must
distribute local working copies of the database to each developer. A discussion
of each of these options follows. Implementing Source Code Control The Microsoft Access Visual SourceSafe Add-In permits you to put
your Access application under source code control while it is under
development. If you put your application under source code control, this
permits you to track and to store changes that are made to your application
over time. By using Microsoft Visual SourceSafe, you can review the history of
an object and then revert to earlier versions of an object. You may check out
objects in the Microsoft Access application, modify them or create new objects
in their local copy, and then check them back into the main database under
source code control. The Microsoft Access Visual SourceSafe Add-In is available
with Microsoft Office XP Developer. To use the Microsoft Access Visual
SourceSafe Add-In, you must also install Microsoft Visual SourceSafe, which is
also available with Microsoft Office XP Developer, separately.Using Individual Working Databases Another option you can implement is to keep a master copy of the
database application in a centralized location, and then use individual working
copies of the database on each developer's computer. Each developer would
develop his or her portion of the application in the local working copy of the
database. When the developer wants to make a change to an object in the
database application, he or she would import the object from the master
database into the local working database. Then the developer would make the
required changes to the object in the local working database, and save the
object. When the developer is ready to commit the changes to the master
database, he or she would export the object to the master database, overwriting
the original object.
One disadvantage of using this approach is that
there is no way to determine if multiple developers are concurrently working on
the same object locally. When the developer exports the object to the master
database, the developer can unknowingly overwrite changes that another
developer committed to the master database. MORE INFORMATIONTo save design changes to Access-specific objects, such as
forms, reports, new page links, macros, modules, and commandbars, Access 2002
must be able to lock the database exclusively during the Save operation. Tables, queries, and relationships do not fall under
this restriction because they are Microsoft Jet-specific objects. Microsoft
uses this requirement with Access 2002 for several reasons:
- It provides consistency with other Visual Basic Environment
client applications.
- It stops dependency on the Jet database engine.
- It improves stability of Access-specific
objects.
Provides Consistency with Other Visual Basic Environment Client Applications Because Access 2002 hosts the Microsoft Visual Basic Environment,
the save model used by Microsoft Access must be consistent with other
applications that host the Visual Basic Environment. The Microsoft Visual Basic
Environment only permits exclusive editing and saving of Visual Basic projects
that are not under source code control. This is true of Microsoft Visual Basic
6.0, and also all Microsoft Office applications that host the Visual Basic
Environment. Stops Dependency on the Jet Database Engine Access offers the ability to create Microsoft Access project
(.adp) files and also Microsoft Access databases (.mdb). By using an Access
project, developers can use Microsoft SQL Server as another database engine to
Microsoft Jet. In the past, all Access specific objects (forms, reports,
macros, modules, and commandbars) were dependent upon the Jet database engine
for storage. These objects were stored in Access-specific system tables in the
Microsoft Jet database. Because it is possible for Access to use Microsoft SQL
Server as an alternative to Microsoft Jet, Microsoft had to develop a storage
mechanism for Access-specific objects that does not rely on the Jet database
engine. Improves Stability of Access-Specific Objects The project storage model improves the stability of
Access-specific objects and the Visual Basic project. Visual Basic for
Applications has never allowed multi-user editing of Visual Basic projects
without source code control. Microsoft Access 95 and Microsoft Access 97 could
circumvent this restriction by hiding project changes made in a multi-user
environment from Visual Basic for Applications, and then merging them into the
project later. However, this had the potential for affecting the stability of
the Visual Basic project. Therefore, Microsoft Access requires an exclusive
lock when designing Access-specific objects to make sure that the project has
only one editor. Editing Microsoft Access Objects in a Multi-User Environment Because users may open a database either for exclusive or shared
use, the save behavior exhibited by Access depends on how the user opened the
database and on whether multiple users are currently accessing it. If
a developer opens the database for exclusive use, the developer can save the
design of any Access-specific object, provided the developer can open the
database for read/write access and has the correct permissions to modify the
design of the object. If a user opens the database for shared use,
the user can save the design of any Access-specific object, provided the user
can open the database for read/write access, has the correct permissions to
modify the design of the object, and Access can obtain an exclusive lock on the
database. Lock Promotion To make sure use of the database is exclusive, Access uses the
connection control feature of the Jet database engine to promote the user's
shared lock to exclusive. Access tries to promote a shared lock to an exclusive
lock as soon as the user opens a form, report, macro, or commandbar in Design
view. Access tries lock promotion at this time in order to prevent the scenario
where a user has made multiple design changes only to later find that the user
cannot save them because Access cannot obtain an exclusive lock. By trying lock
promotion as soon as the user opens an object in Design view, Access can warn
the user if it cannot obtain an exclusive lock before the user makes any design
changes. Access will not try lock promotion when opening a module in Design
view; however, it will try lock promotion as soon as the user edits any module
in the database. Access maintains the exclusive lock until the user
saves or discards all dirty objects and no other objects are open in Design
view. Following this, Access demotes the lock back to shared if the database
was originally opened for shared use. If Access cannot promote the
lock to exclusive when the user opens an object in Design view, Access alerts
the user with the message: You do not have exclusive
access to the database at this time. If you proceed to make changes, you may
not be able to save them later. Following this warning message,
Access will open the object in Design view and allow the user to make design
changes. If the user tries to save the object, Access tries to promote the
shared lock to exclusive. If lock promotion is successful, Access saves the
object and maintains the exclusive lock until the user saves or discards all
other dirty objects and no object remains open in Design view. If lock
promotion fails, the user receives the following message: You do not have exclusive access to the database at this time.
Your design changes will not be saved. If the user tries to close
the dirty object and save changes, Access then prompts the user with the option
of closing the object and discarding design changes made to it, or with the
option of leaving it open and unsaved. Steps to Reproduce the Behavior- Start two instances of Microsoft Access on the same
computer.
- Open the sample database Northwind.mdb in both
instances.
- In the first instance of Microsoft Access, open the
Customers form in Design view.
Note
that you receive the message: You do not have exclusive
access to the database at this time. If you proceed to make changes, you may
not be able to save them later. - Click OK to clear the message.
Note that the form opens in Design view. - Add a text box control to the form.
- On the File menu, click
Save.
Note that you receive the following
message:You do not have exclusive access to the database
at this time. Your design changes will not be saved. - Click OK to clear the message.
- Close the second instance of Access on your
computer.
- In the first instance of Access, try to save the form
again.
Note that the form is saved successfully.
REFERENCES
For additional information about the connection control feature of the Jet
database engine, click the following article number to view the article in the Microsoft Knowledge Base:
287655
HOW TO: Use Connection Control to Prevent Users from Logging On at Run Time in Access 2002
Modification Type: | Minor | Last Reviewed: | 1/26/2005 |
---|
Keywords: | kbDAP kberrmsg kbprb KB283228 kbAudDeveloper |
---|
|