Domanda

Sto usando Access 2003 su una macchina duo-core con 4GB di RAM, sistema operativo Windows XP (Service Pack 3) [5.1.2600]

Periodicamente, ottengo un msg di errore "Non c'è abbastanza memoria per eseguire questa operazione. Chiudere i programmi non necessari e riprovare l'operazione."

Un controllo della Task Manager indica che c'è un sacco di memoria libera. La chiusura di altri programmi aperti non fa alcuna differenza.

Questo accade sporadicamente, e in circostanze diverse: a volte risparmiando disegno Forma o cambia il codice VBA, a volte quando più moduli sono aperti e in uso

.

Se si tenta di salvare le modifiche, e si verifica questo errore, gli oggetti di Access sono danneggiati e non possono essere recuperati.

Qualche suggerimento su che cosa potrebbe causare questo sarebbe molto gradito.

MTIA

È stato utile?

Soluzione 6

Come so che è sia maschere o report che molto probabilmente vengono danneggiati, ho creato un nuovo mdb, e le tabelle solo importati (in allegato), le query, script (uno solo), moduli e menu. Poi ho usato LoadFromText importare maschere e report tramite una funzione, e poi ha fatto il solito decompilare / compilare e compatto / riparazione etc.

Finora, tocchiamo ferro, non ho avuto un altro incidente, in alcuni giorni, quindi io probabilmente bastone con questo metodo di ripristino.

Molte grazie a tutti per i vostri suggerimenti.

Altri suggerimenti

Il progetto VBA nel front-end è probabile danneggiato. È necessario ricostruire da zero e quindi utilizzare pratiche di codifica corretta di accesso:

  1. nelle opzioni VBE, spegnere la compilazione su richiesta (vedi l'articolo di Michael Kaplan su DECOMPILARE per i dettagli del perché).

  2. nelle opzioni VBE, accendere Richiedi dichiarazione di variabili.

  3. nel VBE, personalizzare la vostra barra degli strumenti in modo che il pulsante Compile è facilmente accessibile (è dal menu Debug). Consiglio anche di aggiungere il pulsante Stack di chiamate (dal menu Visualizza), in quanto è a portata di mano per il debug di errori nella modalità di interruzione. Il punto qui è di fare il debugging e la compilazione di più semplice possibile.

  4. dopo aver impostato il proprio ambiente, passare attraverso tutti i moduli del progetto appena recuperato e aggiungere opzione esplicita alla parte superiore di ogni modulo che manca di esso. Quindi compilare. Potrai trovare rapidamente dove si dispone di codice non valido e sarà necessario per risolvere il problema.

  5. da ora in poi, durante la programmazione, compilare spesso, dopo ogni due o tre linee di codice. Probabilmente compilo il mio progetto di 100 o più volte al giorno quando la codifica.

  6. periodicamente decompilare il vostro progetto e compatta e ricompilarlo. Questo pulire qualsiasi crud che si accumula durante lo sviluppo normale.

Queste pratiche assicurano che il codice in un progetto non corrotto rimane in pulita condizione possibile. Sarà fare nulla per recuperare un progetto già corrotto.

Per quanto riguarda come ricostruire il progetto, penso che mi piacerebbe andare via drastica di esportare tutti gli oggetti con Application.SaveAsText e la loro importazione in un nuovo database vuoto con Application.LoadFromText. Questa è superiore a semplice importazione dal front-end corrotto esistente in quanto l'importazione può importare strutture corrotte che non sopravvivere un ciclo SaveAsText / LoadFromText.

I programma giornaliero in Access, lavorando con le applicazioni non banali che utilizzano un sacco di codice, tra cui un sacco di moduli di classe standalone. Non ho perso un oggetto di codificare la corruzione in oltre 5 anni, e che era tornato nel giorno in cui ero ancora usando A97.

Dopo aver scattato in questo vecchio post di mine, e vederlo avuto un bel po 'di interesse, ho pensato che forse un aggiornamento sarebbe in ordine?

2 anni lungo la pista, facendo un sacco di lavoro del 2007 app così come anziani 2003 (e anche '97) apps, ho constatato che il 2007 è meno soggetto a crash davvero brutto rispetto al 2003 - in cui le definizioni di oggetti di accesso (maschere e report esp.) sarebbero facilmente danneggiati.

Ancora seguo i suggerimenti 1-6 (di cui sopra) di David-W-Fenton religiosamente, però, più l'uso di Application.SaveAsText (vedi suggerimento e link qui sopra Tony Toews').

In questi giorni, che si tratti di 97, 2003 o 2007 su cui sto lavorando, se Access dà qualsiasi accenno di " essere strano | schiantarsi | gettando errori inspiegabili ", ecc, faccio la seguente:

  1. chiudere immediatamente l'applicazione di accesso
  2. Backup il file mdb / accdb
  3. riaprire l'applicazione mentre si tiene premuto [Shift] quindi nulla viene eseguito
  4. Esporta tutti gli oggetti come testo utilizzando Application.SaveAsText (come un altro backup)
  5. Chiudere e riaprire l'applicazione utilizzando l'opzione / decompilare
  6. ricompilare il codice VBA
  7. Fare un compatto / riparazione.

Questo non risolve tutto, ma non riduce in modo significativo il numero di corruzioni di oggetti di Access da quello che sono in grado di osservare.

Oh mio.

ho lavorato in un negozio per molti anni che hanno usato Access come loro piattaforma preferita. L'applicazione alla fine ha ottenuto così grande che ha cominciato colpire una limitazione memoria interna di Access 2003. Hanno cominciato con lo stesso problema esatto che si stanno avendo. Come avrete notato, non c'è alcuna indicazione esterna di problemi di memoria quando questo accade.

La società ha parlato a lungo con Microsoft sul problema, e credo che alla fine li Microsoft fornito con una patch. Così si potrebbe voler parlare con Microsoft su questo, se suona come una situazione simile a quello che si sta verificando, in quanto potrebbero essere in grado di fornire con la stessa patch.

In definitiva, la soluzione a lungo termine è quello di rompere l'applicazione in pezzi più piccoli. Trasferirsi in Access 2007 non ha aiutato; in effetti, ha fatto cose peggio perché Access 2007 ha parti in movimento.

Soluzione rapida; garantito al lavoro:

Apri VBA (Alt-F11) Nella finestra immediata digitare quanto segue:

Application.SaveAsText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

poi

Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

Questo è tutto :) Spero che questo aiuta gli altri!

Questo è anche il messaggio di errore predefinito quando Access non ha idea di quale sia il problema è in realtà. Ora, se il vostro MDB è particolarmente grande, dicono più di 800 maschere e report con moduli allora sì il MDB potrebbe essere troppo grande, anche se che ti ha dato un messaggio quando si è andato a creare MDE. 2000: "Microsoft Access non riusciva a creare un database MDE" messaggio di errore

Ho avuto questo accada di tanto in tanto me stesso. E i miei MDB attuali non sono abbastanza così grande. Si noti che compatto e la riparazione non rileva errori in oggetti diversi da tabelle, indici o relazioni. Così l'importazione in un altro MDB è l'unico modo per correggere questi errori.

Stai lavorando a questo MDB attraverso la rete? Questa è l'unica cosa che posso pensare che potrebbe causare questo problema.

Ho riscontrato questo problema molte volte e finalmente trovato una soluzione che ha funzionato. Non so che cosa causa il problema, ma so come risolverlo.

Di solito l'errore si verifica quando si apre un modulo. Quello che dovete fare è completamente ri-creare quella forma. Il modo più semplice per farlo è quello di prima esportare il modulo in un file di testo con la funzione Application.SaveAsText non documentata. Quindi si elimina il modulo dal database e ri-caricarlo con Application.LoadFromText.

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