2

コードを介して (SQL クエリなどを介して .NET から) プログラムで Access データベースが破損しているかどうか、または破損した行を含むテーブルがあるかどうかを確認することは可能ですか?

//アンディ

4

3 に答える 3

2

アプリケーション/データベース レベルのオブジェクトには、そのような「isCorrupted」プロパティはありません。

さらに、破損したデータベースには標準的な動作がありません。状況によっては、データベースがまったく開かない場合があります (ファイルが有効な mdb ファイルとして認識されない)。開くとすぐに、または特定のオブジェクト (テーブル、フォーム、または VBA コード) を使用/開くときにエラーが発生する可能性があります。

このような状況では、あなたの質問に対する肯定的な答えはないと思います。

注: Access の標準の圧縮/修復オプションに加えて、オブジェクトを他のデータベースにエクスポート (または破損したデータベースからインポート) したり、文書化されていない .saveAsText コマンドを使用すると非常に役立ちます。

于 2008-10-28T22:08:41.953 に答える
0

共有ドライブのアクセス データベースで破損を引き起こすネットワークの問題があり、いくつかの特定のテーブルから破損した行をクリーンアップするのに多くの時間を費やしました。

特にメモ フィールドは、残りのデータのようにインラインで保存されず、別のテーブルに保持されるため、破損の良い兆候でした。破損したテーブルをデータシート モードで開き、破損したメモ セルにフォーカスを置いて、どの行が破損したかを判断しようとすることができました。破損があると、すぐにエラーが発生します。

破損した Int 列と Date 列は奇数の値 (1890 年 3 月 18 日、-11100910 など) になりますが、値を読み取っても実際にはエラーはスローされません。

これが、以前の回答の VBA に示されているように、データベース内のすべてのレコードとフィールドを循環させることが理にかなっていますが、メモ フィールドが破損している場合にのみ最も確実に実行される理由です。

于 2009-04-15T13:32:32.163 に答える
0

以前のリリースの Access でエラーをチェックするために使用できる VBA を次に示します。2007年にも合うかもしれません。

Sub CheckForErr(tablename)
Dim rs As dao.Recordset
Dim db As Database

Set db = CurrentDb

Set rs = db.OpenRecordset(tname)

With rs
   Do While Not .EOF
        For Each fld In rs.Fields
            If IsError(rs(fld.Name)) Then
               Debug.Print "Error"
            End If
        Next
        .MoveNext
    Loop
End With

rs.Close
Set rs = Nothing

End Sub
于 2008-10-28T21:21:55.277 に答える