Blokada wyłączna jest wymagana do zapisywania zmian projektu w obiektach programu Access

Oryginalny numer KB: 283228

Uwaga

Zaawansowane: wymaga specjalistycznego kodowania, współdziałania i wielodostępnych umiejętności. Ten artykuł dotyczy tylko bazy danych programu Microsoft Access (.mdb i accdb).

Symptomy

Podczas próby dostosowania pasków narzędzi lub otwarcia formularza programu Microsoft Access, raportu, makra lub modułu w widoku projektu zostanie wyświetlony następujący komunikat:

Obecnie nie masz wyłącznego dostępu do bazy danych. Jeśli przejdziesz do wprowadzania zmian, być może nie będzie można ich później zapisać.

Podczas próby zapisania zmian w projekcie wprowadzonych w formularzu programu Access, raporcie, makra lub module zostanie wyświetlony następujący komunikat:

Obecnie nie masz wyłącznego dostępu do bazy danych. Zmiany projektu nie zostaną zapisane.

Podczas próby zapisania nowej strony dostępu do danych zostanie wyświetlony następujący komunikat:

Nie można utworzyć linku do tej strony dostępu do danych, ponieważ nie można zablokować bazy danych wyłącznie.

Przyczyna

  • Próbujesz otworzyć formularz, raport, makro, moduł lub pasek poleceń w widoku projektu.
  • Próbujesz zapisać zmiany projektu w jednym z tych typów obiektów lub nowy link strony, podczas gdy inni użytkownicy mają tę samą bazę danych otwartą.

Aby zapisać zmiany projektu w tych typach obiektów, program Access musi mieć możliwość uzyskania wyłącznej blokady bazy danych.

Rozwiązanie

W sytuacjach, gdy wielu deweloperów projektuje aplikację programu Access jednocześnie, należy zaimplementować kontrolę kodu źródłowego przy użyciu dodatku Microsoft Visual SourceSafe dla programu Microsoft Access. Możesz też dystrybuować lokalne robocze kopie bazy danych do każdego dewelopera. Poniżej przedstawiono omówienie każdej z tych opcji.

Implementowanie kontroli kodu źródłowego

Usługa Microsoft Access Visual SourceSafe Add-In umożliwia umieszczenie aplikacji programu Access pod kontrolą kodu źródłowego podczas jej opracowywania. Jeśli umieścisz aplikację pod kontrolą kodu źródłowego, umożliwi to śledzenie i przechowywanie zmian wprowadzanych w aplikacji w czasie. Korzystając z usługi Microsoft Visual SourceSafe, możesz przejrzeć historię obiektu, a następnie przywrócić wcześniejsze wersje obiektu. Możesz wyewidencjonować obiekty w aplikacji microsoft access, zmodyfikować je lub utworzyć nowe obiekty w lokalnej kopii, a następnie zaewidencjonować je z powrotem do głównej bazy danych pod kontrolą kodu źródłowego. Visual SourceSafe Add-In programu Microsoft Access jest dostępna w pakiecie Microsoft Office XP Developer. Aby korzystać z dodatku microsoft access Visual SourceSafe, należy również zainstalować usługę Microsoft Visual SourceSafe, która jest również dostępna w programie Microsoft Office XP Developer, osobno.

Korzystanie z poszczególnych działających baz danych

Inną opcją, którą można zaimplementować, jest przechowywanie kopii głównej aplikacji bazy danych w scentralizowanej lokalizacji, a następnie używanie poszczególnych kopii roboczych bazy danych na komputerze każdego dewelopera. Każdy deweloper będzie opracowywać pojedynczą część aplikacji w lokalnej kopii roboczej bazy danych. Gdy deweloperzy chcą wprowadzić zmianę obiektu w aplikacji bazy danych, zaimportują obiekt z bazy danych master do lokalnej działającej bazy danych. Następnie deweloperzy wprowadziliby wymagane zmiany w obiekcie w lokalnej działającej bazie danych i zapisać obiekt. Gdy deweloperzy będą gotowi zatwierdzić zmiany w bazie danych master, wyeksportują obiekt do głównej bazy danych, zastępując oryginalny obiekt.

Jedną z wad tego podejścia jest to, że nie ma sposobu, aby określić, czy wielu deweloperów pracuje jednocześnie nad tym samym obiektem lokalnie. Gdy deweloper eksportuje obiekt do bazy danych master, deweloper może nieświadomie zastąpić zmiany zatwierdzone przez innego dewelopera w bazie danych master.

Więcej informacji

Aby zapisać zmiany projektu w obiektach specyficznych dla programu Access, takich jak formularze, raporty, nowe linki do stron, makra, moduły i paski poleceń, program Access 2002 musi mieć możliwość blokowania bazy danych wyłącznie podczas operacji Zapisywanie . Tabele, zapytania i relacje nie podlegają temu ograniczeniu, ponieważ są obiektami specyficznymi dla rozwiązania Microsoft Jet. Firma Microsoft używa tego wymagania w programie Access 2002 z kilku powodów:

  • Zapewnia spójność z innymi aplikacjami klienckimi środowiska Visual Basic Environment.
  • Zatrzymuje zależność od aparatu bazy danych Jet.
  • Poprawia stabilność obiektów specyficznych dla dostępu.

Zapewnia spójność z innymi aplikacjami klienckimi środowiska Visual Basic

Ponieważ program Access 2002 hostuje środowisko Visual Basic, model zapisywania używany przez program Microsoft Access musi być spójny z innymi aplikacjami, które hostują środowisko Visual Basic. Środowisko Visual Basic umożliwia wyłącznie edytowanie i zapisywanie projektów visual basic, które nie są pod kontrolą kodu źródłowego. Dotyczy to również programu Visual Basic 6.0, a także wszystkich aplikacji pakietu Office hostujących środowisko Visual Basic.

Zatrzymuje zależność od aparatu bazy danych Jet

Program Access oferuje możliwość tworzenia plików projektu programu Microsoft Access (adp), a także baz danych programu Microsoft Access (.mdb). Korzystając z projektu programu Access, deweloperzy mogą używać usługi Microsoft SQL Server jako innego aparatu bazy danych do aplikacji Microsoft Jet. W przeszłości wszystkie obiekty specyficzne dla programu Access (formularze, raporty, makra, moduły i paski poleceń) były zależne od aparatu bazy danych Jet dla magazynu. Te obiekty były przechowywane w tabelach systemowych specyficznych dla programu Access w bazie danych Microsoft Jet. Ponieważ program Access może używać programu Microsoft SQL Server jako alternatywy dla programu Microsoft Jet, firma Microsoft musiała opracować mechanizm przechowywania obiektów specyficznych dla programu Access, który nie korzysta z aparatu bazy danych Jet.

Poprawia stabilność obiektów specyficznych dla dostępu

Model magazynu projektów poprawia stabilność obiektów specyficznych dla programu Access i projektu Visual Basic. Visual Basic for Applications nigdy nie zezwalała na edycję projektów visual basic przez wielu użytkowników bez kontroli kodu źródłowego. Program Microsoft Access 95 i Microsoft Access 97 mogą obejść to ograniczenie, ukrywając zmiany projektu wprowadzone w środowisku wielu użytkowników przed Visual Basic for Applications, a następnie scalając je później z projektem. Miało to jednak wpływ na stabilność projektu Visual Basic. W związku z tym program Microsoft Access wymaga wyłącznej blokady podczas projektowania obiektów specyficznych dla programu Access, aby upewnić się, że projekt ma tylko jeden edytor.

Edytowanie obiektów programu Access w środowisku wielu użytkowników

Ponieważ użytkownicy mogą otworzyć bazę danych na wyłączność lub do użytku współdzielonego, zachowanie zapisywania widoczne przez program Access zależy od tego, jak użytkownik otworzył bazę danych i czy wielu użytkowników aktualnie uzyskuje do niej dostęp.

Jeśli deweloper otworzy bazę danych do wyłącznego użytku, deweloper może zapisać projekt dowolnego obiektu specyficznego dla dostępu, pod warunkiem że deweloper może otworzyć bazę danych w celu uzyskania dostępu do odczytu/zapisu i ma odpowiednie uprawnienia do modyfikowania projektu obiektu.

Jeśli użytkownik otworzy bazę danych do użytku współdzielonego, użytkownik może zapisać projekt dowolnego obiektu specyficznego dla dostępu, pod warunkiem że użytkownik może otworzyć bazę danych w celu uzyskania dostępu do odczytu/zapisu, ma odpowiednie uprawnienia do modyfikowania projektu obiektu, a program Access może uzyskać wyłączną blokadę bazy danych.

Podwyższanie poziomu blokady

Aby upewnić się, że korzystanie z bazy danych jest wyłączne, program Access używa funkcji kontroli połączenia aparatu bazy danych Jet, aby podwyższyć poziom blokady współdzielonej użytkownika do wyłączności. Program Access próbuje podwyższyć poziom blokady współdzielonej do blokady wyłącznej, gdy tylko użytkownik otworzy formularz, raport, makro lub pasek poleceń w widoku projektu. W tej chwili program Access próbuje zablokować podwyższenie poziomu, aby zapobiec sytuacji, w której użytkownik wprowadził wiele zmian w projekcie, aby później stwierdzić, że użytkownik nie może ich zapisać, ponieważ program Access nie może uzyskać blokady wyłącznej. Próbując zablokować podwyższenie poziomu, gdy tylko użytkownik otworzy obiekt w widoku projektu, program Access może ostrzec użytkownika, jeśli nie może uzyskać blokady wyłącznej, zanim użytkownik dokona jakichkolwiek zmian w projekcie. Podczas otwierania modułu w widoku projektu program Access nie będzie próbował zablokować podwyższania poziomu. Jednak spróbuje zablokować podwyższenie poziomu, gdy tylko użytkownik zmodyfikuje dowolny moduł w bazie danych.

Dostęp zachowuje wyłączną blokadę do momentu, gdy użytkownik zapisze lub odrzuci wszystkie zanieczyszczone obiekty, a żadne inne obiekty nie będą otwarte w widoku projektu. W związku z tym program Access obniża blokadę z powrotem do współużytkowanej, jeśli baza danych została pierwotnie otwarta do użytku współdzielonego.

Jeśli program Access nie może podwyższyć poziomu blokady do wyłączności, gdy użytkownik otworzy obiekt w widoku projektu, program Access powiadomi użytkownika o następującym komunikacie:

Obecnie nie masz wyłącznego dostępu do bazy danych. Jeśli przejdziesz do wprowadzania zmian, być może nie będzie można ich później zapisać.

Po wykonaniu tego komunikatu ostrzegawczego program Access otworzy obiekt w widoku projektu i umożliwi użytkownikowi wprowadzanie zmian w projekcie. Jeśli użytkownik spróbuje zapisać obiekt, program Access spróbuje podwyższyć poziom blokady udostępnionej do wyłączności. Jeśli podwyższenie poziomu blokady zakończy się pomyślnie, program Access zapisze obiekt i zachowa blokadę wyłączną do momentu, aż użytkownik zapisze lub odrzuci wszystkie inne zanieczyszczone obiekty, a żaden obiekt nie pozostanie otwarty w widoku projektu. Jeśli podwyższenie poziomu blokady nie powiedzie się, użytkownik otrzyma następujący komunikat:

Obecnie nie masz wyłącznego dostępu do bazy danych. Zmiany projektu nie zostaną zapisane.

Jeśli użytkownik spróbuje zamknąć zanieczyszczony obiekt i zapisać zmiany, program Access wyświetli monit o zamknięcie obiektu i odrzucenie wprowadzonych zmian w projekcie lub pozostawienie go otwartego i niezapisanego.

Kroki umożliwiające odtworzenie zachowania

  1. Uruchom dwa wystąpienia programu Microsoft Access na tym samym komputerze.

  2. Otwórz przykładową bazę danych Northwind.mdb w obu wystąpieniach.

  3. W pierwszym wystąpieniu programu Microsoft Access otwórz formularz Klienci w widoku Projekt .

    Otrzymasz komunikat:

    Obecnie nie masz wyłącznego dostępu do bazy danych. Jeśli przejdziesz do wprowadzania zmian, być może nie będzie można ich później zapisać.

  4. Kliknij przycisk OK , aby wyczyścić komunikat.

    Formularz zostanie otwarty w widoku projektu .

  5. Dodaj kontrolkę pola tekstowego do formularza.

  6. W menu Plik kliknij pozycję Zapisz.

    Zostanie wyświetlony następujący komunikat:

    Obecnie nie masz wyłącznego dostępu do bazy danych. Zmiany projektu nie zostaną zapisane.

  7. Kliknij przycisk OK , aby wyczyścić komunikat.

  8. Zamknij drugie wystąpienie programu Access na komputerze.

  9. W pierwszym wystąpieniu programu Access spróbuj ponownie zapisać formularz.

    Formularz został pomyślnie zapisany.