Szukaj…


Wprowadzenie

Gdy pojawi się błąd: „Program Microsoft Access napotkał problem i musi zostać zamknięty”, często nie ma zbyt wielu informacji, które pomogłyby w zidentyfikowaniu przyczyny błędu. Poniżej znajduje się seria kroków, które możesz podjąć, aby rozwiązać przyczynę błędów.

Uwagi

Pamiętaj, aby usunąć inne zmienne z równania podczas testowania

Uszkodzenie sieci

Nie ładuj klienta poza siecią. Umieść go na dysku lokalnym i uruchom go stamtąd.

Kompilacje korporacyjne

Jeśli pracujesz w środowisku korporacyjnym korzystającym z „kompilacji komputerowych” i nie odniosłeś sukcesu w dekompilacji, testowaniu pamięci ani usuwaniu danych binarnych - odmów dalszego testowania, dopóki zespół IT nie zapewni użytkownikowi maszyny testowej, która ma zainstalowano tylko Windows, Office i Service Pack.

Całe oprogramowanie i aktualizacje powinny być instalowane ręcznie, bez instalacji nienadzorowanych. Nie instaluj programu antywirusowego na tym komputerze do testowania.

Zrozum, że wiele działów IT po prostu próbuje zastosować jedno rozwiązanie dla wszystkich wersji, a wszystkie ich wersje są oparte na sobie. Z czasem konflikty oprogramowania mogą bezpośrednio powodować awarię programu Access lub zachowywać się dziwnie.

Zła moc

Jak wspomniano w przykładzie pamięci - wahania mocy mogą powodować błędy komputera. Jeśli baza danych znajduje się w budynku przemysłowym, spróbuj zdobyć kondycjoner lub zasilacz UPS zapewniający czyste zasilanie (bez baterii, a nie z głównego przejścia przez warystor z tlenkiem metalu)

Sprawdź także kabel zasilający, który jest podłączony do listwy zasilającej lub gniazdka. Upewnij się, że parametry miernika i napięcia są wystarczające. Działy IT często zostawiają podłączone kable zasilające na stacji i po prostu usuwają maszynę. Po wielu latach używają mocniejszych zasilaczy, ale nie wyłączyli kabla. To robi różnicę. W razie wątpliwości weź nowy, grubszy kabel.

Baza danych dekompilacji

To zawsze powinna być twoja początkowa poprawka. Dobrą zasadą jest dekompilacja bazy danych przed każdym wydaniem.

  1. Utwórz skrót do dekompilacji . Spowoduje to załadowanie bazy danych z przełącznikiem „/ decompile”.

    1. Kliknij prawym przyciskiem myszy plik bazy danych. Wybierz Kopiuj
    2. Kliknij prawym przyciskiem myszy w oknie eksploratora i wybierz „Wklej skrót”
    3. Kliknij skrót prawym przyciskiem myszy i wybierz „Właściwości”
    4. W polu Cel przejdź do końca linii i dodaj /decompile
    5. Kliknij Ok, aby zamknąć skrót
  2. Otwórz bazę danych za pomocą Shift.
    Przytrzymaj klawisz Shift, dwukrotnie klikając ten skrót. Zapobiega to wykonywaniu automatycznych uruchomień w bazie danych. Powinieneś przejść bezpośrednio do okna nawigacji.

  3. Kompaktuj i napraw bazę danych. Po załadowaniu bazy danych należy kliknąć przycisk Kompaktuj i napraw.

    1. Znajdź przycisk Kompaktuj i napraw bazę danych na wstążce Narzędzia .
    2. Przytrzymaj klawisz Shift. Przytrzymaj go, klikając przycisk Kompaktuj i napraw .
  4. Ponownie skompiluj bazę danych

    1. Przejdź do okna VBA (Control + G)
    2. Wybierz z menu opcję Debuguj -> Kompiluj

Jest to kompletny proces dekompilacji. Zasadniczo powinno to naprawić 99% wszystkich awarii programu Access lub dziwnego zachowania formularza.

Sprawdź pamięć komputera

Jeśli Twoje awarie są losowe lub sporadyczne, wykonaj ten krok. Jeśli awarie występują przy każdym uruchomieniu bazy danych, ten krok nie rozwiąże problemu (chociaż zła pamięć może być przyczyną, dla której uszkodzenie nastąpiło w pierwszej kolejności).

Użyj testera pamięci, który uruchamia się poza systemem operacyjnym i uruchamia wiele przebiegów. Dwie popularne opcje to MemTest86 (komercyjny) i MemTest86 + (open source)

Rozpocznij test i pozwól mu działać w godzinach pracy. Powodem tego jest fakt, że inne czynniki w budynku, takie jak hałas w obwodach zasilania, mogą powodować błędy pamięci, więc chcesz spróbować zachować te same zmienne.

Jeśli masz błędy pamięci, musisz ustalić, czy jest to spowodowane złą pamięcią w komputerze, czy z innego powodu. Jest to jednak poza zakresem tego dokumentu.

Usuń dane binarne z formularza

Czasami awarie występują stale w jednym formularzu lub raporcie lub występują tylko podczas drukowania. Możliwe, że dane binarne w formularzu / raporcie uległy uszkodzeniu.

Zapisz obiekt Form / Report jako tekst Istnieją dwie nieudokumentowane funkcje. Application.SaveAsText i Application.LoadFromText. Możesz użyć tych funkcji do wyeksportowania definicji formularza / raportu, wyczyszczenia definicji, a następnie zaimportowania jej ponownie.

  1. Przed kontynuowaniem wykonaj kopię zapasową bazy danych
  2. Przejdź do okna natychmiastowego VBA (Control + G)
  3. Wpisz Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (Zastąp MyForm nazwą formularza / raportu. Użyj acReport, jeśli naprawiasz uszkodzony raport)
  4. Zmień nazwę oryginalnego elementu formularza (np. Zmień nazwę na MyForm.Bak) w oknie bazy danych

Wyczyść plik definicji formularzy / raportów

  1. Otwórz wyeksportowany plik (np. MyForm.txt) w notatniku

  2. Usuń wiersz „Suma kontrolna =” (powinien znajdować się w wierszu 3)

  3. Wyczyść dane binarne

    1. Zidentyfikuj bloki danych binarnych. Przejrzyj plik, a zobaczysz wiersze rozpoczynające się od „Parameter = Begin”. Podążając za tymi liniami, będziesz mieć linie zakodowanych danych binarnych. Na koniec blok binarny zakończy się linią składającą się tylko z „End”. Blok danych binarnych zawiera pierwszą linię (z instrukcją Begin) i wszystkie linie do ostatniej linii włącznie (z instrukcją End).

      Uwaga: Wszystkie te bloki powinny pojawić się PRZED definicjami formantów formularza

    2. Usuń bloki danych binarnych dla następujących parametrów:

      • NameMap
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. Poszukaj innych problemów. Gdy plik jest otwarty, przewiń resztę pliku i poszukaj wszystkiego, co przyciąga wzrok, szczególnie w kodzie modułu VBA na dole. Będziesz szukał wszystkiego, co odstaje od reszty i może być korupcją.

  5. Zapisz plik.

Załaduj formularz / raport z powrotem do Access and Test

  1. Załaduj formularz z powrotem do programu Access.
    • W programie Access przejdź do bezpośredniego okna (Control + G)
    • Wpisz Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • Dekompilacja / Kompaktowa naprawa / Rekompilacja (zobacz inny przykład w dokumentacji)
    • Otwórz formularz / raport, aby przetestować. Mam nadzieję, że teraz wszystko działa.
    • Usuń stary uszkodzony formularz (np. MyForm.bak)

Zapobiegaj tej korupcji w przyszłości

Najczęstszą przyczyną uszkodzenia danych binarnych w raporcie / formularzu jest to, że wiele komputerów / użytkowników korzysta z tego samego pliku klienta bazy danych, zamiast mieć własną osobną kopię. Dlatego każdy użytkownik powinien mieć na swoim pulpicie własny plik klienta, który uruchamia.

Usuń pola „Obiekt OLE”

Jeśli masz obrazy lub inne dane przechowywane w samym Access jako obiekty OLE, powinieneś znaleźć lepsze podejście. Gdy dane OLE są przechowywane, są one przechowywane zgodnie z oprogramowaniem (i wersją oprogramowania) na komputerze, w którym są przechowywane. Gdy inny komputer wyświetla dane OLE Object w formularzu, ale nie ma zainstalowanego dokładnego oprogramowania / wersji - dość często powoduje to awarię aplikacji.

Jeśli przechowujesz dane obrazu, lepszym rozwiązaniem jest zapisanie nazwy pliku i zapisanie obrazów w standardowej lokalizacji. Nowsze wersje dostępu mają natywną kontrolę, dzięki której można to zrobić.

Odbuduj całą bazę danych

To dużo pracy, więc zrób to w ostateczności po wyczerpaniu wszystkich innych opcji. Musisz to zrobić tylko wtedy, gdy problem występuje u różnych użytkowników na różnych komputerach. Jeśli nie występuje u wszystkich użytkowników, najprawdopodobniej nie jest to uszkodzony kontener bazy danych.

Podobnie jak w przypadku usuwania danych binarnych, zamierzasz odbudować bazę danych od zera. Proces ten jest trochę rytualny, ale jeśli zostanie starannie wykonany, aby nie „zachować” możliwej korupcji, proces ten jest wysoce skuteczny.

Utwórz nowy kontener bazy danych dostępu.

  • W Access na karcie Plik możesz wybrać „Nowy”. Utwórz nową, pustą bazę danych w formacie ACCDB.

Przenieś wszystkie obiekty do nowego kontenera

Nie używaj funkcji import / eksport w ciągu dostępie do przenoszenia przedmiotów, a nie po prostu kliknij i przeciągnij. W ten sposób można skopiować uszkodzone elementy do nowego kontenera.

Stoły:

  • Dla każdej tabeli w starym kontenerze dostępu utwórz nową tabelę w nowym kontenerze.
  • W widoku projektu skopiuj / wklej definicje pól.
  • Sprawdź właściwości tabeli, aby upewnić się, że pasują do obu baz danych
  • Przenieś także wszystkie makra danych (jak to zrobić, zobacz sekcję Makra)
  • Aby przenieść dane, wyeksportuj stare dane do XML lub CSV, a następnie zaimportuj z tego formatu.

Zapytania:

  • Załaduj każde zapytanie do widoku SQL.
  • Skopiuj / Wklej tekst SQL.
  • Wklej do nowej bazy danych.
  • Porównaj właściwości zapytania, aby się upewnić, że są zgodne.

Formularze / raporty:

  • Dla każdego formularza / raportu użyj funkcji Application.SaveAsText, aby wyeksportować formularze / raporty do pliku tekstowego.
  • Usuń dane binarne (zobacz Usuwanie danych binarnych z dokumentacji formularza, aby zapoznać się z tym procesem)
  • Użyj funkcji Application.LoadFromText, aby ponownie zaimportować obiekty do nowej bazy danych

Makra

Masz trzy metody przenoszenia makr.

  1. Odtwórz ręcznie każde makro w nowym kontenerze bazy danych.
  2. Użyj metody Application.SaveAsText / Application.LoadFromText z parametrem acMacro .
  3. Kopiuj / wklej definicje makr dla każdego makra
    • Wybierz Wszystkie (Control + A), aby zaznaczyć wszystkie elementy makro. Następnie skopiuj (Control + C).
    • Otwórz pusty dokument Notatnika i Wklej (Control + V) Makro XML.
    • Utwórz nowe puste makro w nowym kontenerze bazy danych.
    • W Notatniku wybierz Cały tekst (Control + A). Następnie skopiuj (Control + C)
    • W pustym makrze wklej (Control + V). Makro powinno się pojawić. Zapisz to.

Moduły

  • Dla każdego modułu wybierz cały kod (Control + A) i wklej (Control + V) do nowego kontenera bazy danych.
  • Pamiętaj, aby sprawdzić właściwości bazy danych (w oknie VBA przejdź do Narzędzia -> Właściwości klienta)

Makra danych

Dla każdego makra danych użyj metod SaveAsText / LoadFromText.

  1. Przejdź do okna natychmiastowego VBA (Control + G)
  2. Wpisz Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (Zamień MyTableName na nazwę tabeli zawierającej makra danych)
  3. Przejrzyj plik pod kątem oznak uszkodzenia
  4. W nowym kontenerze bazy danych załaduj definicję za pomocą Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"

Jak wcześniej wspomniano, jest to DUŻO pracy, ale przynosi efekty. Tej metody należy również użyć podczas migracji bazy danych Access 97 do 2000 lub bazy danych Access 2000 do 2003.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow