Domanda

Sono su un client che sta facendo delle correzioni rapide alla sua applicazione di accesso. È passato un po 'di tempo con l'accesso, ma mi sto riprendendo rapidamente. Tuttavia, ho scoperto un problema interessante:

Per alcuni rapporti, ottengo un " Record cancellato " errore. Ho controllato i rapporti e sembra che ci sia un problema con una tabella. Quando apro quella tabella, trovo un record in cui tutte le colonne sono contrassegnate con "quot # # cancellato". Quindi, ovviamente, questa riga sembra essere il colpevole. Tuttavia, quando provo a eliminare quella riga, non succede nulla. Se riapro la tabella, la riga esiste ancora.

Esiste un danneggiamento nel database? Come posso rimuovere definitivamente questo record?

Modifica: è una versione MS2000

Soluzione: la semplice compressione / riparazione non ha funzionato. Ho invece convertito il database nel formato di file 2003, il che ha funzionato. Ho segnato la prima risposta suggerendo comprimere / riparare, poiché mi ha indicato nella giusta direzione. Grazie!

È stato utile?

Soluzione

Hai provato lo strumento di riparazione / compatta Access integrato? Ciò dovrebbe eliminare i record eliminati dal database.

La posizione esatta varia in base alla versione di Access in esecuzione, ma su Access 2003 si trova in Strumenti > Utilità database > Database compatto e di riparazione. Alcune versioni precedenti di Access avevano due strumenti separati - uno per compatto, uno per riparazione - ma erano accessibili da una posizione simile. Se sono separati sulla versione del client, è necessario eseguire entrambi.

Questa dovrebbe essere un'operazione non distruttiva, ma sarebbe meglio testarla su una copia del file MDB (ci scusiamo per affermare l'ovvio).

Altri suggerimenti

Tony Toews, Access MVP, ha una guida completa alla corruzione:

Domande frequenti sugli MDB di Microsoft Access

  • Alcuni sintomi di corruzione
  • Determinazione della workstation che ha causato il danneggiamento
  • Cause di corruzione
  • Per recuperare i tuoi dati

A parte, decompile è molto utile per risolvere strani eventi durante la codifica e per migliorare i tempi di avvio.

puoi anche provare questa Utilità da riga di comando

// Andy

La compattazione e l'importazione non risolveranno il problema per l'errore segnalato, che è chiaramente un puntatore danneggiato per un campo memo. L'unica cosa che puoi fare è eliminare e ricreare il record che causa il problema. E devi trovare il modo di modificare i dati dei memo (o eliminare i campi dei memo - hai davvero bisogno di più di 255 caratteri o no?) Che non ti espongono al rischio di corruzione. Ciò significa evitare i controlli associati sui moduli per i campi memo.

Utilizza invece una casella di testo non associata e, nell'evento OnCurrent del modulo, assegna i dati correnti dall'origine record sottostante del modulo:

  Me!txtMyMemo = Me!MyMemo

Per salvare le modifiche nel controllo non associato, utilizzare l'evento AfterUpdate del controllo:

  Me!MyMemo = Me!txtMyMemo
  Me.Dirty = False        ' save the whole record

Perché i campi memo sono soggetti a corruzione? Perché non sono archiviati nella stessa pagina di dati dei campi non memo, ma invece, tutto ciò che si trova nella pagina di dati principale del record è un puntatore ad un'altra pagina di dati (o set di pagine di dati se è una grande porzione di dati) in cui sono memorizzati i dati del memo effettivo. Se non fosse fatto in questo modo, un record con un memo in esso supererebbe molto rapidamente la lunghezza massima del record.

Il puntatore viene corrotto relativamente facilmente, molto spesso a causa di un problema fatale durante la modifica in un controllo associato. La modifica con un controllo non associato non elimina del tutto il problema, ma significa che il tempo in cui si è esposti al pericolo è molto, molto breve (ovvero, il tempo necessario per l'esecuzione di queste due righe di codice nell'evento AfterUpdate) .

Oltre alle opzioni già pubblicate sopra, ho usato anche un altro metodo semplice: basta creare un nuovo file MDB e importare tutti gli oggetti da quello corrotto. Non dimenticare di ottenere sistema e / o oggetti nascosti quando vai in questo modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top