Sök…


Introduktion

När du får ett fel: "Microsoft Access har stött på ett problem och måste stängas" finns det ofta inte mycket information som hjälper dig att identifiera orsaken till felet. Nedan följer en serie steg du kan vidta för att felsöka orsaken till felen.

Anmärkningar

Se till att ta bort andra variabler från ekvationen när du testar

Nätverkskorruption

Ladda inte klienten från ett nätverk. Sätt den på den lokala enheten och kör den därifrån.

Företag bygger

Om du befinner dig i en företagsmiljö som använder "datorbyggnad" och inte har haft någon framgång med Decompiling, Testing Memory eller stripping Binary data - så vägrar att göra ytterligare test tills IT-teamet kan förse användaren med en testmaskin som har endast Windows, Office och Service Pack har installerats.

All programvara och uppdateringar ska installeras för hand utan att använda obevakade installationer. Installera inte antivirus på den här maskinen för testning.

Förstå att många IT-avdelningar helt enkelt försöker göra en One-Size-Fits-All-metod med builds, och deras builds är alla baserade på varandra. Med tiden kan programvarukonflikter direkt orsaka att Access kraschar eller fungerar konstigt.

Dålig kraft

Som nämnts i minnesexemplet - kraftfluktuationer kan orsaka datorfel. Om databasen finns i en industribyggnad, försök sedan ta hand om ett strömkonditioneringsapparat eller en UPS som ger ren ström (från batteriet, inte från huvudet som passerar genom en metalloxid Varistor)

Kontrollera också strömförsörjningskabeln som ansluts till eluttaget eller uttaget. Se till att mätaren och spänningsspecifikationerna är tillräckliga. IT-avdelningar lämnar ofta strömkablar anslutna till stationen och tar bara bort maskinen. Efter många år använder de köttigare strömförsörjning, men har inte stängt av kabeln. Det gör en skillnad. Om du är osäker, ta med en ny, tjockare kabel.

Dekompilera databasen

Detta bör alltid vara din första fix. En bra policy är att dekompilera databasen före varje utgåva.

  1. Skapa en dekompilera genväg . Detta laddar databasen med en "/ dekompilera" switch.

    1. Högerklicka på din databasfil. Välj Kopiera
    2. Högerklicka i explorerfönstret och välj "Klistra in genväg"
    3. Högerklicka på genvägen och välj "Egenskaper"
    4. Gå till slutet av raden i rutan Mål och lägg till /decompile
    5. Klicka på Ok för att stänga genvägen
  2. Öppna databas med skift.
    Håll ner shift-tangenten medan du dubbelklickar på den här genvägen. Detta förhindrar att alla körningar körs i databasen. Du bör gå direkt till navigeringsfönstret.

  3. Komprimera och reparera databasen. När databasen laddats måste du klicka på knappen Kompakt och reparera.

    1. Leta reda på knappen Compact and Repair DatabaseVerktygsband .
    2. Håll Shift-tangenten intryckt. Fortsätt hålla den nere medan du klickar på knappen Kompakt och reparera .
  4. Kompilera databasen igen

    1. Gå in i VBA-fönstret (Control + G)
    2. Välj Debug -> Compilera från menyn

Detta är den kompletta dekompileringsprocessen. Generellt sett bör det fixa 99% av alla Access-kraschar eller konstigt beteende.

Testa datorminne

Om dina kraschar är slumpmässiga eller sporadiska, gör detta steg. Om dina kraschar inträffar varje gång du kör databasen, löser detta steg inte problemet (även om dåligt minne kan vara orsaken till att korruptionen inträffade i första hand).

Använd en minnestestare som startar utanför operativsystemet och kör flera pass. Två populära val är MemTest86 (Commercial) och MemTest86 + (Open Source)

Starta testet och låt det köras under arbetstid. Anledningen till detta beror på att andra faktorer i byggnaden, till exempel brus på strömkretsarna, kan orsaka minnesfel, så du vill försöka hålla variablerna desamma.

Om du har minnesfel måste du identifiera om det beror på dåligt minne i datorn eller någon annan faktor. Detta ligger dock utanför detta dokument.

Ta bort binära data från formuläret

Ibland inträffar krascharna ständigt i en enda form eller rapport, eller inträffar endast vid utskrift. Det är möjligt att binära data i formuläret / rapporten har blivit skadade.

Spara formuläret / rapportobjektet som text Det finns två odokumenterade funktioner. Application.SaveAsText och Application.LoadFromText. Du kan använda dessa funktioner för att exportera formulär / rapportdefinitioner, rensa upp definitionen och sedan importera den igen.

  1. Gör en säkerhetskopia av din databas innan du fortsätter
  2. Gå till VBA-omedelbart fönster (Kontroll + G)
  3. Skriv Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (Ersätt MyForm med namnet på formuläret / rapporten. Använd acReport om det är en skadad rapport du fixar)
  4. Byt namn på originalformuläret (t.ex. byta namn till MyForm.Bak) i databasfönstret

Rengör filen Form / Report Definitions

  1. Öppna den exporterade filen (t.ex. MyForm.txt) i anteckningar

  2. Radera raden "Kontrollsumma =" (ska vara på rad 3)

  3. Rensa binära data

    1. Identifiera de binära datablocken. Titta igenom filen så ser du rader som börjar med "Parameter = Börja". Efter dessa rader kommer du att ha rader med kodad binär data. Slutligen slutar det binära blocket med en linje som endast består av "Slut". Binary Data-blocket inkluderar den första raden (med Start-uttalandet) och alla rader till och med den sista raden (med slutrapporten).

      Obs: Alla dessa block ska visas FÖR dina formulärkontrolldefinitioner

    2. Radera de binära datablocken för följande parametrar:

      • NameMap
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. Leta efter andra problem. Medan du har filen öppen, bläddra igenom resten av filen och leta efter allt som fångar ditt öga, särskilt i VBA-modulkoden längst ner. Du letar efter allt som sticker ut från resten och kan vara korruption.

  5. Spara filen.

Ladda tillbaka formuläret / rapporten i Access och Test

  1. Ladda formuläret tillbaka i Access.
    • I Access går du till det omedelbara fönstret (Control + G)
    • Skriv in Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • Dekompilera / kompakt reparera / rekompilera (se det andra exemplet i dokumentationen)
    • Öppna formuläret / rapporten för att testa. Förhoppningsvis fungerar allt nu.
    • Ta bort den gamla korrupta formen (t.ex. MyForm.bak)

Förhindra denna korruption i framtiden

Den vanligaste orsaken till korrupt binär data i en rapport / form är när flera datorer / användare använder samma databasklientfil istället för att ha en egen separat kopia. Det är därför varje användare bör ha sin egen klientfil på sitt skrivbord som de kör.

Ta bort "OLE Object" -fält

Om du har bilder eller andra data lagrade i Access själv som OLE-objekt, bör du hitta en bättre metod. När OLE-data lagras lagras de enligt programvaran (och programvaruversionen) på datorn som lagrar dem. När en annan dator går att visa de OLE-objektdata på formuläret, men inte har den exakta programvaran / versionen installerad - ganska ofta resulterar det i en programkrasch.

Om du lagrar bilddata är en bättre metod att lagra filnamnet och istället spara bilderna på en standardplats. Nyare versioner av åtkomst har de ursprungliga kontrollerna för att göra detta vägen att gå.

Ombygga hela databasen

Detta är mycket arbete, så gör detta som en sista utväg efter att ha uttömt alla andra alternativ. Du behöver bara göra detta om problemet uppstår för olika användare på olika maskiner. Om det inte sker för alla användare är det troligtvis inte en skadad databasbehållare.

I likhet med stegen för att ta bort binär data kommer du att bygga om din databas från början. Denna process är lite ritualistisk, men om den utförs noggrant med försiktighet för att inte "bevara" någon möjlig korruption, är processen mycket effektiv.

Skapa en ny databasbehållare för åtkomst.

  • I Access kan du välja "Ny" på filfliken. Skapa en ny, tom databas i ACCDB-format.

Flytta alla objekt till den nya behållaren

Använd inte Importera / Exportfunktionerna inom Access för att flytta objekten, och klicka inte bara och dra. Om du gör detta kan du kopiera de skadade artiklarna till den nya behållaren.

tabeller:

  • För varje tabell i den gamla åtkomstcontainern, skapa en ny tabell i den nya behållaren.
  • Kopiera / klistra in fältdefinitionerna från designvy.
  • Kontrollera tabellegenskaperna för att se till att de matchar i båda databaserna
  • Flytta också alla datamakroer (se avsnittet om makron för hur du gör det)
  • Om du vill flytta data exporterar du gamla data till XML eller CSV och importerar sedan från det formatet.

frågor:

  • Ladda varje fråga i SQL-vyn.
  • Kopiera / klistra in SQL-texten.
  • Klistra in i den nya databasen.
  • Jämför Query-egenskaper för att säkerställa att de matchar.

Blanketter / rapporter:

  • För varje formulär / rapport använder du funktionen Application.SaveAsText för att exportera formulär / rapporter till en textfil.
  • Ta bort binära data (se Ta bort binära data från dokumentation för formulär för att bekanta dig med denna process)
  • Använd funktionen Application.LoadFromText för att importera objekten till den nya databasen igen

Makron

Du har tre metoder för att flytta makron.

  1. Återskapa varje makro för hand i den nya databasbehållaren.
  2. Använd metoden Application.SaveAsText / Application.LoadFromText med parametern acMacro .
  3. Kopiera / klistra in makrodefinitioner för varje makro
    • Välj alla (Kontroll + A) för att välja alla makroelement. Sedan Kopiera (Kontroll + C).
    • Öppna ett tomt anteckningsblockdokument och klistra in (Control + V) Macro XML.
    • Skapa en ny tom makro i den nya databasbehållaren.
    • I Notepad väljer du all text (Kontroll + A). Sedan Kopiera (Kontroll + C)
    • I den tomma makroen klistra in (Kontroll + V). Makroen bör visas. Spara det.

moduler

  • Välj varje kod (Control + A) för varje modul och klistra in (Control + V) i den nya databasbehållaren.
  • Kontrollera databasegenskaperna (i VBA-fönstret, gå till Verktyg -> Klientegenskaper)

Datamakro

Använd metoderna SaveAsText / LoadFromText för varje datamakro.

  1. Gå in i VBA: s omedelbara fönster (Control + G)
  2. Skriv Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (Ersätt MyTableName med namnet på tabellen som innehåller datamakronen)
  3. Granska filen för eventuella tecken på korruption
  4. I den nya databasbehållaren laddar du definitionen med Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"

Som tidigare nämnts är detta en hel del arbete, men det har resultat. Den här metoden bör också användas vid migrering av en Access 97-databas till 2000 eller en Access 2000-databas till 2003.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow