4

私は、アクセスアプリケーションにいくつかの簡単な修正を行っているクライアントにいます。しばらくの間、アクセスを試みましたが、すぐに回復しています。ただし、興味深い問題を発見しました。

一部のレポートで、「レコードが削除されました」というエラーが表示されます。レポートを確認しましたが、1 つのテーブルに問題があるようです。そのテーブルを開くと、すべての列が「#deleted」とマークされているレコードを見つけます。明らかに、この行が原因のようです。ただし、その行を削除しようとしても、実際には何も起こりません。テーブルを再度開くと、行はまだ存在します。

データベースに破損がありますか?このレコードを完全に削除するにはどうすればよいですか?

編集: MS2000バージョンです

解決策:単純な圧縮/修復では機能しませんでした。代わりに、データベースを 2003 ファイル形式に変換しました。圧縮/修復を提案する最初の回答にマークを付けました。これは、正しい方向に向けられたためです。ありがとう!

4

5 に答える 5

4

AccessMVPのTonyToewsには、汚職に関する包括的なガイドがあります。

破損したMicrosoftAccessMDBに関するFAQ

  • いくつかの破損症状
  • 破損の原因となったワークステーションの特定
  • 腐敗の原因
  • データを取得するには

余談ですが、逆コンパイルは、コーディング時に奇妙な出来事を整理したり、起動時間を改善したりするのに非常に役立ちます。

于 2008-10-30T12:30:20.293 に答える
4

組み込みの Access コンパクト/修復ツールを試しましたか? これにより、削除されたレコードがデータベースからフラッシュされます。

正確な場所は、実行している Access のバージョンによって異なりますが、Access 2003 では、[ツール] > [データベース ユーティリティ] > [データベースの最適化と修復] の下にあります。一部の以前のバージョンの Access には、圧縮用と修復用の 2 つの個別のツールがありましたが、同様の場所からアクセスされていました。クライアントが持っているバージョンでそれらが分かれている場合は、両方を実行する必要があります。

これは非破壊的な操作である必要がありますが、MDB ファイルのコピーでこれをテストすることをお勧めします (明白なことを言って申し訳ありません)。

于 2008-10-30T11:12:31.667 に答える
3

圧縮してインポートしても、報告されたエラーの問題は修正されません。これは明らかにメモフィールドのポインタが破損しています。できることは、問題の原因となっているレコードを削除して再作成することだけです。また、破損のリスクにさらされないように、メモデータを編集する(またはメモフィールドを削除する-本当に255文字を超える文字が必要かどうか)方法を見つける必要があります。これは、メモフィールドのフォームのバインドされたコントロールを回避することを意味します。

代わりに、バインドされていないテキストボックスを使用し、フォームのOnCurrentイベントで、フォームの基になるレコードソースから現在のデータを割り当てます。

  Me!txtMyMemo = Me!MyMemo

バインドされていないコントロールへの編集を保存するには、コントロールのAfterUpdateイベントを使用します。

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

メモフィールドが破損するのはなぜですか?これらは非メモフィールドと同じデータページに保存されないため、代わりに、レコードのメインデータページにあるのは、他のデータページ(または、データページの大きなチャンクの場合はデータページのセット)へのポインタだけです。 data)実際のメモデータが保存されている場所。このようにしないと、メモが含まれているレコードが最大レコード長をすぐに超えてしまいます。

ポインタは比較的簡単に破損します。ほとんどの場合、バインドされたコントロールでの編集中に致命的な問題が発生します。バインドされていないコントロールを使用して編集しても、問題が完全に解消されるわけではありませんが、危険にさらされる時間が非常に短いことを意味します(つまり、AfterUpdateイベントでこれらの2行のコードが実行されるのにかかる時間) 。

于 2008-10-31T01:27:34.453 に答える
3

このコマンドラインユーティリティを試すこともできます

//アンディ

于 2008-10-30T11:32:50.970 に答える
2

上記のオプション以外に、別の簡単な方法も使用しました。新しい MDB ファイルを作成し、破損したファイルからすべてのオブジェクトをインポートするだけです。この方法でシステムや隠しオブジェクトを取得することを忘れないでください。

于 2008-10-30T13:05:18.227 に答える