Frage

Ich bin an einem Client einige schnelle Lösungen, um ihre Zugriffsanwendung zu tun. Es dauerte eine Weile, ich mit Zugang ein zu gehen hatte, aber ich bin erholt sich schnell. Allerdings habe ich ein interessantes Problem entdeckt:

Bei einigen Berichten, erhalte ich eine Fehlermeldung „Der Datensatz wurde gelöscht“. Ich habe die Berichte überprüft, und es scheint, als ob es ein Problem mit einer Tabelle ist. Wenn die Tabelle zu öffnen, finde ich einen Datensatz, in dem alle Spalten markiert sind „#Deleted“. So offensichtlich, scheint diese Zeile die Täter zu sein. Allerdings, wenn ich versuche, diese Zeile zu löschen, passiert nichts wirklich. Wenn ich die Tabelle wieder öffnen, besteht die Reihe noch.

Gibt es eine Korruption in der db? Wie kann ich diesen Rekord für eine gute entfernen?

Edit: Es ist eine MS2000-Version

Lösung: einfach komprimieren / reparieren hat nicht funktioniert. Ich konvertierte die Datenbank auf das 2003-Dateiformat statt, was den Trick. Ich habe die erste Antwort darauf hindeutet, Kompresse / Reparatur markiert, da es mich in der richtigen Richtung. Dank!

War es hilfreich?

Lösung

Haben Sie versucht, die in Access compact / Reparaturwerkzeug gebaut? Dies sollte gelöschte Datensätze aus der Datenbank spülen.

Die genaue Lage ist je nach der Version von Access Sie laufen, aber auf Access 2003 ist es unter Extras> Datenbank-Dienstprogramme> Datenbank komprimieren und reparieren. Einige früheren Versionen von Access hatten zwei separate Werkzeuge - ein für kompakte, eine für die Reparatur - aber sie wurden von einer ähnlichen Stelle abgerufen. Wenn sie der Client auf die Version getrennt sind, müssen Sie beide laufen.

Dies sollte eine nicht-destruktive Operation sein, aber es wäre am besten, das der MDB-Datei auf einer Kopie zu testen (Entschuldigung für das Offensichtliche).

Andere Tipps

Tony Toews, Zugang MVP, hat einen umfassenden Leitfaden für die Korruption:

Corrupt Microsoft Access MDBs FAQ

  • Einige Korruption Symptome
  • Die Ermittlung der Arbeitsstation, die die Korruption
  • verursacht
  • Korruption verursacht
  • Ihre Daten abrufen

Als beiseite, decompile zum Aussortieren ungeradee Ereignisse sehr nützlich ist bei der Codierung und zur Verbesserung der Startzeiten.

Sie können auch versuchen, dieses Befehlszeilenprogramm

// andy

Kompaktierung und Import wird das Problem nicht beheben, für die Fehler gemeldet, was für ein Memo-Feld eindeutig ein beschädigter Zeiger ist. Das einzige, was Sie tun können, ist löschen und die Aufzeichnung neu erstellen, die das Problem verursacht. Und Sie müssen Wege finden, Memo-Daten zu bearbeiten (oder Memo-Felder zu beseitigen - tun Sie wirklich mehr als 255 Zeichen benötigen oder nicht?), Die nicht Sie zu Korruptionsrisiko aussetzt. Das bedeutet, gebundenen Steuerelemente auf Formulare für Memo-Felder zu vermeiden.

Stattdessen ein ungebundenes Textfeld verwenden, und in dem OnCurrent Ereignisse des Formulars, weist die aktuellen Daten aus dem zugrunde liegenden Datenherkunft des Formulars:

  Me!txtMyMemo = Me!MyMemo

Um Änderungen an das ungebundenen Steuerelement zu speichern, verwenden Sie das After-Update-Ereignis des Steuerelements:

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

Warum sind Memo-Felder unter Korruption? Weil sie in der gleichen Datenseite als die Nicht-Memo-Felder nicht gespeichert werden, sondern alles, was in dem Datensatz des Hauptdatenseite ist ein Zeiger auf eine anderen Datenseite (oder die Datenseiten gesetzt, wenn es ein großer Teil der Daten), wo die tatsächlichen Memodaten gespeichert sind. Wenn es auf diese Weise nicht getan, einen Datensatz mit einem Memo in es würde sehr schnell die maximale Satzlänge nicht überschreiten.

Der Zeiger relativ leicht beschädigt, am häufigsten durch ein fatales Problem in einer gebundenen Kontrolle während der Bearbeitung. wird mit einer ungebundenen Steuer Bearbeitung das Problem nicht vollständig beseitigen, sondern bedeutet, dass die Zeit, in der Sie der Gefahr ausgesetzt ist, ist sehr, sehr kurz (dh die Zeit, die für diese beiden Zeilen Code nimmt in dem After-Update-Ereignisse auszuführen) .

Neben den Optionen bereits oben geschrieben, habe ich eine weitere einfache Methode als gut verwendet: Einfach eine neue MDB-Datei erstellen und alle Objekte aus dem beschädigten importieren. Vergessen Sie nicht, System und / oder versteckte Objekte zu erhalten, wenn Sie diesen Weg gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top