ms-access
Come risolvere i problemi di Access
Ricerca…
introduzione
Osservazioni
Assicurati di rimuovere altre variabili dall'equazione durante il test
Corruzione di rete
Non caricare il client da una rete. Mettilo sul disco locale ed eseguilo da lì.
Corporazioni Corporative
Se ci si trova in un ambiente aziendale che utilizza "build del computer" e non ha avuto successo con la decompilazione, il test della memoria o lo spoglio dei dati binari, rifiutarsi di eseguire ulteriori test fino a quando il team IT non può fornire all'utente una macchina di prova che solo Windows, Office e Service Pack installati.
Tutti i software e gli aggiornamenti devono essere installati a mano senza utilizzare installazioni non presidiate. Non installare antivirus su questa macchina per il test.
Comprendi che molti reparti IT cercano semplicemente di fare un approccio One-Size-Fits-All con le build e le loro build sono tutte basate l'una sull'altra. Nel corso del tempo, i conflitti software possono causare l'arresto o l'arresto anomalo di Access.
Cattiva potenza
Come accennato nell'esempio di memoria, le fluttuazioni della potenza possono causare errori del computer. Se il database si trova in un edificio industriale, prova a mettere le mani su un condizionatore o un UPS che fornisce energia pulita (fuori dalla batteria, non dal passaggio principale attraverso un varistore di ossido di metallo)
Inoltre, controllare il cavo di alimentazione che si collega alla barra di alimentazione o alla presa. Assicurarsi che le specifiche di misura e tensione siano sufficienti. I reparti IT spesso lasciano i cavi di alimentazione collegati alla stazione e rimuovono semplicemente la macchina. Dopo molti anni, utilizzano alimentatori più potenti, ma non hanno spento il cavo. Fa la differenza. In caso di dubbio, portare un nuovo cavo più spesso.
Decompilare il database
Questa dovrebbe essere sempre la tua soluzione iniziale. Una buona politica è quella di decompilare il database prima di ogni versione.
Crea un collegamento decompilato . Questo carica il database con uno switch "/ decompile".
- Fare clic con il pulsante destro sul file di database. Seleziona Copia
- Fare clic con il tasto destro nella finestra di Explorer e selezionare "Incolla collegamento"
- Fare clic con il tasto destro sul collegamento e selezionare "Proprietà"
- Nella casella Target, vai alla fine della riga e aggiungi
/decompile - Fai clic su OK per chiudere il collegamento
Apri Database con Shift.
Tieni premuto il tasto MAIUSC mentre fai doppio clic su questa scorciatoia. Ciò impedisce l'esecuzione di esecuzioni automatiche all'interno del database. Dovresti andare direttamente alla finestra di navigazione.Compatta e ripara il database. Una volta caricato il database, sarà necessario fare clic sul pulsante Compatta e ripristina.
- Individuare il pulsante Compatta e ripristina database sulla barra multifunzione Strumenti .
- Tieni premuto il tasto Maiusc. Continua a tenerlo premuto mentre fai clic sul pulsante Compatta e Ripara .
Ricompilare il database
- Vai nella finestra VBA (Control + G)
- Seleziona Debug -> Compila dal menu
Questo è il processo completo di decompilazione. In genere dovrebbe risolvere il 99% di tutti i crash di Access o il comportamento strano della forma.
Prova la memoria del computer
Se i tuoi arresti anomali sono casuali o sporadici, esegui questo passaggio. Se gli arresti anomali si verificano ogni volta che si esegue il database, questo passaggio non risolverà il problema (anche se la memoria errata potrebbe essere la ragione per cui si è verificata la corruzione in primo luogo).
Utilizzare un tester di memoria che si avvia all'esterno del sistema operativo e esegue più passaggi. Due scelte popolari sono MemTest86 (Commerciale) e MemTest86 + (Open Source)
Avvia il test e fallo funzionare durante l'orario di lavoro. La ragione di ciò è dovuta al fatto che altri fattori nell'edificio come il rumore sui circuiti di alimentazione possono causare errori di memoria, quindi si desidera provare a mantenere le stesse variabili.
Se si verificano errori di memoria, è necessario identificare se è dovuto a una cattiva memoria nel computer o ad altri fattori. Questo però va oltre lo scopo di questo documento.
Rimuovere i dati binari dal modulo
A volte gli arresti anomali si verificano costantemente in un'unica forma o report o si verificano solo durante la stampa. È possibile che i dati binari all'interno del modulo / report siano corrotti.
Salva il modulo / Segnala oggetto come testo Esistono due funzioni non documentate. Application.SaveAsText e Application.LoadFromText. È possibile utilizzare queste funzioni per esportare le definizioni di modulo / report, pulire la definizione e quindi importarla nuovamente.
- Effettuare un backup del database prima di procedere
- Vai alla finestra VBA Immediate (Control + G)
- Digitare
Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"(Sostituire MyForm con il nome del modulo / report. Utilizzare acReport se si tratta di un report corrotto che si sta risolvendo) - Rinominare l'elemento del modulo originale (ad es. Rinominarlo in MyForm.Bak) all'interno della finestra del database
Pulire il file di definizioni di rapporto / maschera
Apri il file esportato (ad esempio MyForm.txt) nel blocco note
Elimina la riga "Checksum =" (dovrebbe essere sulla linea 3)
Cancellare i dati binari
Identificare i blocchi di dati binari. Guarda attraverso il file e vedrai le righe che iniziano con "Parameter = Begin". Seguendo queste linee avrai linee di dati binari codificati. Infine, il blocco binario terminerà con una linea composta solo da "Fine". Il blocco dati binari include la prima riga (con l'istruzione Begin) e tutte le righe fino a includere l'ultima riga (con l'istruzione End).
Nota: tutti questi blocchi devono apparire PRIMA delle definizioni del controllo del modulo
Cancellare i blocchi di dati binari per i seguenti parametri:
- NameMap
- PrtMip
- PrtDevMode
- PrtDevNames
- PrtDevModeW
- PrtDevNamesW
Cerca altri problemi. Mentre hai aperto il file, scorri il resto del file e cerca tutto ciò che attira l'attenzione, specialmente nel codice del modulo VBA in basso. Sarai alla ricerca di tutto ciò che sporge dal resto e potrebbe essere corruzione.
Salva il file.
Caricare il modulo / report in Access and Test
- Carica il modulo in Access.
- In Access, vai alla finestra immediata (Control + G)
- Digitare
Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" - Decompila / Compatta Ripara / Ricompila (Vedi l'altro esempio all'interno della documentazione)
- Apri il modulo / rapporto per testare. Speriamo che tutto funzioni ora.
- Elimina il vecchio modulo corrotto (es. MyForm.bak)
Prevenire questa corruzione in futuro
La causa più comune dei dati binari corrotti all'interno di un rapporto / modulo è quando più computer / utenti utilizzano lo stesso file client del database invece di avere una propria copia separata. Questo è il motivo per cui ogni utente dovrebbe avere il proprio file client sul proprio desktop che esegue.
Rimuovere i campi "Oggetto OLE"
Se hai immagini o altri dati memorizzati in Access come oggetti OLE, dovresti trovare un approccio migliore. Quando i dati OLE sono memorizzati, vengono memorizzati in base al software (e alla versione del software) sul computer che lo memorizza. Quando un altro computer visualizza i dati dell'oggetto OLE nel modulo, ma non ha l'esatto software / versione installata, molto spesso ciò provoca un arresto anomalo dell'applicazione.
Se si memorizzano i dati dell'immagine, un approccio migliore è quello di memorizzare il nome file e salvare invece le immagini in una posizione standard. Le versioni più recenti di accesso hanno i controlli nativi per rendere questa la strada da percorrere.
Ricostruisci l'intero database
Questo è un sacco di lavoro, quindi fatelo come ultima risorsa dopo aver esaurito tutte le altre opzioni. Hai solo bisogno di farlo se il problema si verifica per utenti diversi, su macchine diverse. Se non si verifica per tutti gli utenti, molto probabilmente non è un contenitore di database corrotto.
Analogamente ai passaggi nella rimozione dei dati binari, ricostruirai il tuo database da zero. Questo processo è un po 'ritualistico, ma se fatto con cura meticolosamente per non "preservare" ogni possibile corruzione, allora il processo è altamente efficace.
Crea un nuovo contenitore del database di accesso.
- In Access, nella scheda File, puoi selezionare "Nuovo". Crea un nuovo database vuoto nel formato ACCDB.
Sposta tutti gli oggetti nel nuovo contenitore
Non utilizzare le funzioni di importazione / esportazione in Access per spostare gli oggetti, e non è sufficiente fare clic e trascinare. In questo modo puoi copiare gli articoli corrotti nel nuovo contenitore.
tabelle:
- Per ogni tabella nel vecchio contenitore di accesso, creare una nuova tabella nel nuovo contenitore.
- Dalla vista disegno, copia / incolla le definizioni dei campi.
- Controllare le proprietà della tabella per assicurarsi che corrispondano in entrambi i database
- Sposta anche tutti i Macro dati (vedi la sezione Macro per come farlo)
- Per spostare i dati, esportare i vecchi dati in XML o CSV e quindi importarli da quel formato.
Interrogazioni:
- Carica ogni query nella vista SQL.
- Copia / incolla il testo SQL.
- Incolla nel nuovo database.
- Confronta le proprietà delle query per assicurarti che corrispondano.
Moduli / rapporti:
- Per ogni modulo / report, utilizzare la funzione Application.SaveAsText per esportare i moduli / report in un file di testo.
- Rimuovere i dati binari (vedere Rimuovere i dati binari dalla documentazione di Form per familiarizzare con questo processo)
- Utilizzare la funzione Application.LoadFromText per reimportare gli oggetti nel nuovo database
Macro
Hai tre metodi per spostare i Macro.
- Ricrea ogni macro a mano nel nuovo contenitore del database.
- Utilizzare il metodo
Application.SaveAsText/Application.LoadFromTextcon il parametroacMacro. - Copia / incolla le definizioni delle macro per ogni macro
- Seleziona tutto (controllo + A) per selezionare tutti gli elementi macro. Quindi Copia (Ctrl + C).
- Aprire un documento Blocco note vuoto e incollare (Control + V) il codice XML macro.
- Creare una nuova macro vuota nel nuovo contenitore del database.
- Nel blocco note, seleziona tutto il testo (Control + A). Quindi Copia (Ctrl + C)
- Nella macro vuota, incolla (Control + V). Dovrebbe apparire la macro. Salvarla.
moduli
- Per ciascun modulo, selezionare tutto il codice (Control + A) e incollare (Control + V) nel nuovo contenitore del database.
- Assicurati di controllare le proprietà del database (nella finestra VBA, vai su Strumenti -> Proprietà client)
Macro dati
Per ogni Macro dati, utilizzare i metodi SaveAsText / LoadFromText.
- Vai alla finestra VBA Immediate (Control + G)
- Digitare
Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"(Sostituisci MyTableName con il nome della tabella contenente i dati macro) - Esaminare il file per eventuali segni di corruzione
- Nel nuovo contenitore del database, caricare la definizione utilizzando
Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
Come accennato in precedenza, questo è un sacco di lavoro, ma ha dei risultati. Questo metodo dovrebbe essere utilizzato anche durante la migrazione di un database di Access 97 a 2000 o un database di Access 2000 2003.