ms-access
Problemen met Access-crashes oplossen
Zoeken…
Invoering
Opmerkingen
Zorg ervoor dat u tijdens het testen andere variabelen uit de vergelijking verwijdert
Netwerk corruptie
Laad de client niet van een netwerk. Zet het op de lokale schijf en voer het vanaf daar uit.
Bedrijf bouwt
Als u zich in een bedrijfsomgeving bevindt die "computerbuilds" gebruikt en geen succes heeft gehad met decompileren, geheugen testen of binaire gegevens strippen - weiger dan verdere tests te doen totdat het IT-team de gebruiker een testmachine kan bieden die alleen Windows, Office en Service Packs geïnstalleerd.
Alle software en updates moeten handmatig worden geïnstalleerd zonder installatie zonder toezicht. Installeer geen antivirus op deze machine om te testen.
Begrijp dat veel IT-afdelingen gewoon proberen een One-Size-Fits-All aanpak te doen met de builds, en hun builds allemaal op elkaar zijn gebaseerd. Na verloop van tijd kunnen softwareconflicten er direct voor zorgen dat Access crasht of vreemd werkt.
Slechte kracht
Zoals vermeld in het geheugenvoorbeeld kunnen stroomschommelingen computerfouten veroorzaken. Als de database zich in een industrieel gebouw bevindt, probeer dan een stroomconditioner of een UPS te bemachtigen die schone stroom levert (van de batterij, niet van de hoofdleiding die door een metaaloxide-varistor loopt)
Controleer ook de voedingskabel die op de voedingsstaaf of het stopcontact wordt aangesloten. Zorg ervoor dat de specificaties van de meter en spanning voldoende zijn. IT-afdelingen laten vaak stroomkabels aangesloten op het station en verwijderen gewoon de machine. Na vele jaren gebruiken ze vleziger voedingen, maar hebben de kabel niet verwisseld. Het maakt een verschil. Neem bij twijfel een nieuwe, dikkere kabel mee.
Database decompileren
Dit moet altijd je eerste oplossing zijn. Een goed beleid is om de database vóór elke release te decompileren.
Maak een decompilerende snelkoppeling . Dit laadt de database met een "/ decompile" -schakelaar.
- Klik met de rechtermuisknop op uw databasebestand. Selecteer Kopiëren
- Klik met de rechtermuisknop in het verkennervenster en selecteer "Snelkoppeling plakken"
- Klik met de rechtermuisknop op de snelkoppeling en selecteer "Eigenschappen"
- Ga in het vak Doel naar het einde van de regel en voeg toe
/decompile - Klik op OK om de snelkoppeling te sluiten
Open database met Shift.
Houd de Shift-toets ingedrukt en dubbelklik op deze snelkoppeling. Dit voorkomt dat automatische runs worden uitgevoerd binnen de database. U moet rechtstreeks naar het navigatievenster gaan.Compact en herstel de database. Nadat de database is geladen, moet u op de knop Compact and Repair klikken.
- Zoek de knop Database comprimeren en repareren op het lint Tools .
- Houd de Shift-toets ingedrukt. Blijf het ingedrukt houden terwijl u op de knop Compact and Repair klikt.
Hercompileer de database
- Ga naar het VBA-venster (Control + G)
- Selecteer Debug -> Compile in het menu
Dit is het complete decompilatieproces. Over het algemeen moet 99% van alle Access-crashes of vreemd vormgedrag worden opgelost.
Test computergeheugen
Als uw crashes willekeurig of sporadisch zijn, voert u deze stap uit. Als uw crashes zich voordoen telkens wanneer u de database uitvoert, kan deze stap het probleem niet oplossen (hoewel slecht geheugen de reden kan zijn waarom de corruptie in de eerste plaats is opgetreden).
Gebruik een geheugentester die opstart buiten het besturingssysteem en meerdere passages uitvoert. Twee populaire keuzes zijn MemTest86 (commercieel) en MemTest86 + (open source)
Start de test en laat hem tijdens werkuren lopen. De reden hiervoor is omdat andere factoren in het gebouw, zoals ruis op de stroomkringen, geheugenfouten kunnen veroorzaken, dus u wilt proberen de variabelen hetzelfde te houden.
Als u geheugenfouten hebt, moet u vaststellen of dit te wijten is aan slecht geheugen in de computer of een andere factor. Dit valt echter buiten het bestek van dit document.
Binaire gegevens uit formulier verwijderen
Soms gebeuren de crashes constant in één vorm of rapport, of alleen tijdens het afdrukken. Het is mogelijk dat de binaire gegevens in het formulier / rapport corrupt zijn geworden.
Het formulier- / rapportobject opslaan als tekst Er zijn twee functies zonder papieren. Application.SaveAsText en Application.LoadFromText. U kunt deze functies gebruiken om de formulier- / rapportdefinities te exporteren, de definitie op te schonen en vervolgens opnieuw te importeren.
- Maak een back-up van uw database voordat u doorgaat
- Ga naar het VBA Direct-venster (Control + G)
- Type
Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"(Vervang MyForm door de naam van het formulier / rapport. Gebruik acReport als het een corrupt rapport is dat u oplost) - Wijzig de naam van het oorspronkelijke formulieritem (bijvoorbeeld hernoemen naar MyForm.Bak) in het databasevenster
Ruim het formulier Formulier / Rapportdefinities op
Open het geëxporteerde bestand (bijv. MyForm.txt) in Kladblok
Verwijder de regel "Checksum =" (moet regel 3 zijn)
Wis binaire gegevens
Identificeer de binaire gegevensblokken. Kijk door het bestand en u ziet regels die beginnen met "Parameter = Begin". Als u deze regels volgt, hebt u regels gecodeerde binaire gegevens. Ten slotte eindigt het binaire blok met een regel die alleen uit "Einde" bestaat. Het blok Binaire gegevens bevat de eerste regel (met de instructie Start) en alle regels tot en met de laatste regel (met de instructie End).
Opmerking: Al deze blokken moeten verschijnen VOORDAT uw formulierbesturingsdefinities
Verwijder de binaire gegevensblokken voor de volgende parameters:
- NameMap
- PrtMip
- PrtDevMode
- PrtDevNames
- PrtDevModeW
- PrtDevNamesW
Zoek naar andere problemen. Terwijl u het bestand hebt geopend, bladert u door de rest van het bestand en zoekt u naar iets dat uw aandacht trekt, vooral in de VBA-modulecode onderaan. Je zult op zoek zijn naar alles dat uitsteekt van de rest en mogelijk corruptie is.
Bewaar het bestand.
Laad het formulier / rapport terug in Access en Test
- Laad het formulier terug in Access.
- Ga in Access naar het directe venster (Control + G)
- Type
Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" - Decompileren / Compact repareren / hercompileren (zie het andere voorbeeld in de documentatie)
- Open het formulier / rapport om te testen. Hopelijk werkt alles nu.
- Verwijder het oude beschadigde formulier (bijv. MyForm.bak)
Voorkom deze corruptie in de toekomst
De meest voorkomende oorzaak van corrupte binaire gegevens in een rapport / formulier is wanneer meerdere computers / gebruikers hetzelfde databaseclientbestand gebruiken in plaats van een eigen, afzonderlijk exemplaar. Daarom moet elke gebruiker zijn eigen clientbestand op zijn bureaublad hebben dat hij uitvoert.
Verwijder de velden "OLE-object"
Als u afbeeldingen of andere gegevens in Access zelf hebt opgeslagen als OLE-objecten, moet u een betere aanpak vinden. Wanneer de OLE-gegevens worden opgeslagen, worden deze opgeslagen volgens de software (en softwareversie) op de computer die ze opslaat. Wanneer een andere computer die OLE-objectgegevens op het formulier weergeeft, maar niet de exacte software / versie heeft geïnstalleerd - resulteert dit vaak in een applicatie-crash.
Als u afbeeldingsgegevens opslaat, is het een betere aanpak om de bestandsnaam op te slaan en in plaats daarvan de afbeeldingen op een standaardlocatie op te slaan. Nieuwere versies van toegang hebben de eigen besturingselementen om dit de juiste weg te maken.
Bouw de hele database opnieuw op
Dit is veel werk, dus doe dit als een laatste redmiddel nadat alle andere opties zijn uitgeput. U hoeft dit alleen te doen als het probleem zich voordoet voor verschillende gebruikers, op verschillende machines. Als het niet voor alle gebruikers voorkomt, is het waarschijnlijk geen corrupte databasecontainer.
Net als bij de stappen voor het verwijderen van binaire gegevens, gaat u uw database helemaal opnieuw opbouwen. Dit proces is een beetje ritueel, maar als het zorgvuldig en zorgvuldig wordt gedaan om mogelijke corruptie niet te "behouden", dan is het proces zeer effectief.
Maak een nieuwe toegangsdatabasecontainer.
- In Access, op het tabblad Bestand, kunt u "Nieuw" selecteren. Maak een nieuwe, lege database in ACCDB-indeling.
Verplaats alle objecten naar de nieuwe container
Gebruik de Import / Export functies niet te gebruiken binnen Toegang tot de objecten te verplaatsen, en niet gewoon klikken en slepen. Dit kan de beschadigde items naar de nieuwe container kopiëren.
tabellen:
- Maak voor elke tabel in de oude toegangscontainer een nieuwe tabel in de nieuwe container.
- Kopieer / plak vanuit de ontwerpweergave de velddefinities.
- Controleer de tabeleigenschappen om ervoor te zorgen dat ze in beide databases overeenkomen
- Verplaats ook gegevensmacro's (zie het gedeelte Macro's voor meer informatie)
- Om de gegevens te verplaatsen, exporteert u de oude gegevens naar XML of CSV en importeert u vervolgens vanuit dat formaat.
Vragen:
- Laad elke query in SQL-weergave.
- Kopieer / plak de SQL-tekst.
- Plakken in de nieuwe database.
- Vergelijk Query-eigenschappen om te zorgen dat ze overeenkomen.
Formulieren / rapporten:
- Gebruik voor elk formulier / rapport de functie Application.SaveAsText om de formulieren / rapporten naar een tekstbestand te exporteren.
- Verwijder de binaire gegevens (zie Binaire gegevens verwijderen uit formulierdocumentatie om uzelf vertrouwd te maken met dit proces)
- Gebruik de Application.LoadFromText-functie om de objecten opnieuw in de nieuwe database te importeren
macro's
U hebt drie methoden om de macro's te verplaatsen.
- Maak elke macro handmatig opnieuw in de nieuwe databasecontainer.
- Gebruik de methode
Application.SaveAsText/Application.LoadFromTextmet de parameteracMacro. - Kopieer / plak macro-definities voor elke macro
- Selecteer Alles (Control + A) om alle macro-elementen te selecteren. Kopieer vervolgens (Control + C).
- Open een leeg Kladblok-document en plak (Control + V) de Macro XML.
- Maak een nieuwe lege macro in de nieuwe databasecontainer.
- Selecteer in Kladblok alle tekst (Control + A). Kopieer vervolgens (Control + C)
- In de lege macro Plakken (Control + V). De macro zou moeten verschijnen. Bewaar het.
modules
- Selecteer voor elke module alle code (Control + A) en plak (Control + V) in de nieuwe databasecontainer.
- Controleer de database-eigenschappen (ga in het VBA-venster naar Extra -> Clienteigenschappen)
Gegevensmacro's
Gebruik voor elke gegevensmacro de methoden SaveAsText / LoadFromText.
- Ga naar het directe venster van VBA (Control + G)
- Type
Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"(Vervang MyTableName door de naam van de tabel met de gegevensmacro's) - Controleer het bestand op tekenen van corruptie
- Laad de definitie in de nieuwe databasecontainer met
Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
Zoals eerder vermeld, is dit VEEL werk, maar het heeft resultaten. Deze methode moet ook worden gebruikt bij het migreren van een Access 97-database naar 2000 of een Access 2000-database naar 2003.