MS Access: Es ist nicht genügend Speicher vorhanden, um diese Operation auszuführen

8

Ich verwende Access 2003 auf einem Dual-Core-Computer mit 4 GB RAM unter Windows XP (Service Pack 3) [5.1.2600]

In regelmäßigen Abständen erhalte ich eine Fehlermeldung. msgstr "Es ist nicht genügend Speicher vorhanden, um diese Operation auszuführen. Schließen Sie nicht benötigte Programme und versuchen Sie die Operation erneut."

Eine Überprüfung des Task-Managers zeigt an, dass genügend freier Speicher vorhanden ist. Das Schließen anderer geöffneter Programme macht keinen Unterschied.

Dies geschieht sporadisch und unter verschiedenen Umständen: manchmal beim Speichern von Formularentwurf oder VBA-Codeänderungen, manchmal, wenn mehrere Formulare geöffnet und verwendet werden.

Wenn Sie versuchen, Entwurfsänderungen zu speichern, und dieser Fehler auftritt, sind die Access-Objekte beschädigt und können nicht wiederhergestellt werden.

Irgendwelche Vorschläge dazu, was das verursachen könnte, wären sehr willkommen.

MTIA

    
maxhugen 15.10.2009, 22:28
quelle

7 Antworten

1

Da ich weiß, dass entweder Formulare oder Berichte höchstwahrscheinlich beschädigt sind, habe ich ein neues mdb erstellt und nur importierte Tabellen, Abfragen, Skripte (nur eines), Module und Menüs importiert. Dann habe ich LoadFromText verwendet, um Formulare und Berichte über eine Funktion zu importieren, und dann das übliche Dekompilieren / Kompilieren und Komprimieren / Reparieren usw.

Berühren Sie bisher Holz, ich hatte an manchen Tagen keinen weiteren Absturz, daher werde ich wahrscheinlich bei dieser Wiederherstellungsmethode bleiben.

Vielen Dank an alle für Ihre Vorschläge.

    
maxhugen 20.10.2009, 02:35
quelle
8

Das VBA-Projekt in Ihrem Frontend ist wahrscheinlich beschädigt. Sie müssen es von Grund auf neu erstellen und dann die richtigen Zugriffscodierungsmethoden verwenden:

  1. Deaktivieren Sie in den VBE-Optionen COMPILE ON DEMAND (Einzelheiten finden Sie in Michael Kaplans Artikel auf DECOMPILE ) warum).

  2. Aktivieren Sie in den VBE-Optionen REQUIRE VARIABLE DECLARATION.

  3. Passen Sie im VBE Ihre Symbolleiste so an, dass die Schaltfläche COMPILE leicht zugänglich ist (im Menü Debuggen). Ich empfehle auch, den CALL STACK-Button (aus dem VIEW-Menü) hinzuzufügen, da er zum Debuggen von Fehlern im Break-Modus nützlich ist. Der Punkt hier ist, Debugging und kompilieren so einfach wie möglich zu machen.

  4. Nachdem Sie Ihre Umgebung eingerichtet haben, gehen Sie durch alle Module in Ihrem neu wiederhergestellten Projekt und fügen OPTION EXPLICIT an die Spitze jedes Moduls hinzu, dem es fehlt. Dann kompilieren. Sie werden schnell herausfinden, wo Sie ungültigen Code haben, und Sie müssen es beheben.

  5. Von nun an, beim Programmieren, kompilieren Sie häufig, nach jeweils zwei oder drei Zeilen Code. Wahrscheinlich kompiliere ich mein Projekt 100 oder mehr Mal am Tag beim Codieren.

  6. dekomprimieren Sie Ihr Projekt regelmäßig und komprimieren Sie es und kompilieren Sie es neu. Dadurch werden alle Verunreinigungen entfernt, die während der normalen Entwicklung anfallen.

Diese Praktiken stellen sicher, dass der Code in einem nicht korrupten Projekt so sauber wie möglich bleibt. Es wird nichts tun, um ein bereits beschädigtes Projekt wiederherzustellen.

Im Hinblick darauf, wie das Projekt neu aufgebaut werden soll, würde ich den drastischen Weg gehen, alle Objekte mit Application.SaveAsText zu exportieren und sie mit Application.LoadFromText in eine neue leere Datenbank zu importieren. Dies ist dem einfachen Importieren von Ihrem vorhandenen beschädigten Frontend überlegen, da der Import beschädigte Strukturen importieren kann, die einen SaveAsText / LoadFromText-Zyklus nicht überleben werden.

Ich programmiere täglich in Access und arbeite mit nicht-trivialen Apps, die viel Code verwenden, einschließlich vieler eigenständiger Klassenmodule. Ich habe seit über 5 Jahren kein Objekt mehr an Code-Korruption verloren, und das war damals, als ich noch A97 benutzte.

    
David-W-Fenton 16.10.2009 00:04
quelle
4

Nachdem ich über diesen alten Posten von mir gestolpert bin und gesehen habe, dass er ziemlich interessant ist, dachte ich, dass vielleicht ein Update in Ordnung wäre?

Nach zwei Jahren, vielen App-Arbeiten im Jahr 2007 und älteren 2003- (und sogar 97er) Apps, finde ich 2007 weniger anfällig für wirklich schlimme Abstürze als 2003 - wo Access-Objektdefinitionen sind (Formulare und Berichte vor allem) würde leicht beschädigt werden.

Ich folge aber immer noch den Vorschlägen 1-6 (oben) von David-W-Fenton und verwende Application.SaveAsText (siehe Tony Toews Vorschlag und Link oben).

Heute arbeite ich an 97, 2003 oder 2007, wenn Access irgendeinen Hinweis darauf gibt, dass seltsam ist | crashing | unerklärliche Fehler werfen "etc, mache ich folgendes:

  1. Schließen Sie sofort die Access App
  2. Sichern Sie die mdb / accdb-Datei
  3. Öffne die App erneut, während du [Shift] gedrückt hältst, so dass nichts läuft
  4. Exportieren Sie alle Objekte als Text mit Application.SaveAsText (als weitere Sicherung)
  5. Schließen und öffnen Sie die App mit dem Schalter / decompile
  6. Kompilieren Sie den VBA-Code erneut
  7. Machen Sie eine Kompaktierung / Reparatur.

Dies löst nicht alles, aber es reduziert die Anzahl der Beschädigungen von Access-Objekten erheblich, was ich beobachten kann.

    
maxhugen 30.08.2011 11:46
quelle
3

Oh mein.

Ich habe viele Jahre in einem Laden gearbeitet, in dem Access die bevorzugte Plattform war. Die Anwendung wurde schließlich so groß, dass sie begann, eine interne Speicherbeschränkung von Access 2003 zu treffen. Sie begannen das genau gleiche Problem zu erfahren, das Sie haben. Wie Sie bemerkt haben, gibt es keine externe Anzeige von Speicherproblemen, wenn dies geschieht.

Das Unternehmen hat lange mit Microsoft über das Problem gesprochen, und ich glaube, dass Microsoft ihnen schließlich einen Patch zur Verfügung gestellt hat. Vielleicht möchten Sie mit Microsoft darüber sprechen, wenn es sich ähnlich anhört wie bei Ihnen, da sie Ihnen möglicherweise den gleichen Patch liefern können.

Letztlich besteht die langfristige Lösung darin, die Anwendung in kleinere Teile zu zerlegen. Der Wechsel zu Access 2007 hat nicht geholfen. Tatsächlich hat es die Dinge verschlimmert, weil Access 2007 mehr bewegliche Teile hat.

    
Robert Harvey 15.10.2009 22:40
quelle
3

Schnelle Lösung; garantiert funktionieren:

Öffnen Sie VBA ( Alt-F11 ) Im nächsten Fenster geben Sie Folgendes ein:

%Vor%

dann

%Vor%

Das ist es :) Hoffe das hilft anderen!

    
Joesoap 19.12.2011 06:29
quelle
1

Dies ist auch die Standardfehlermeldung, wenn Access keine Ahnung hat, was das Problem eigentlich ist. Wenn Ihre MDB jetzt besonders groß ist, sagen Sie mehr als 800 Formulare und Berichte mit Modulen, dann könnte die MDB zu groß sein, obwohl Sie eine Nachricht erhalten haben, als Sie MDEs erstellt haben. ACC2000: Fehlermeldung "Microsoft Access konnte keine MDE-Datenbank erstellen"

Ich habe das gelegentlich selbst erlebt. Und meine derzeitigen MDBs sind nicht ganz so groß. Beachten Sie, dass compact und repair keine Fehler in anderen Objekten als Tabellen, Indizes oder Beziehungen erkennt. Der Import in eine andere MDB ist die einzige Möglichkeit, diese Fehler zu korrigieren.

Arbeiten Sie an dieser MDB über das Netzwerk? Das ist das einzige, woran ich denken kann, dass dieses Problem verursachen könnte.

    
Tony Toews 15.10.2009 23:31
quelle
0

Ich habe dieses Problem viele Male erlebt und schließlich eine Lösung gefunden, die funktioniert hat. Ich weiß nicht, was das Problem verursacht, aber ich weiß, wie ich es lösen kann.

Normalerweise tritt der Fehler auf, wenn Sie ein Formular öffnen. Was Sie tun müssen, ist das Formular vollständig neu zu erstellen. Der einfachste Weg ist, das Formular zunächst in eine Textdatei mit der undokumentierten Funktion Application.SaveAsText zu exportieren. Dann löschen Sie das Formular aus Ihrer Datenbank und laden es erneut mit Application.LoadFromText.

    
Birger 16.10.2009 14:14
quelle