2009-06-09 8 views
3

私は、古典的なフロントエンド/バックエンドアプローチを使用するAccessアプリケーションを持っています。昨日、バックエンドは私が知らない理由で壊れてしまった。だから私はAccess 2003でバックエンドを開き、アクセスしてファイルを修復したいのかどうか聞いてきました。私ははいと言っていました。「コンパクトで修復」操作後のMS Accessクエリの問題

私はデータベースを開くことができますテーブルの内容を参照して、ほとんどのクエリを実行します。

ただし、特定のwhere句では動作しないアクセスクエリがあります。

例:

// This works in the original DB, but not in the compacted one : 
SELECT a, b, c 
FROM tbl1 INNER JOIN tbl2 ON tbl1.d = tbl2.d 
WHERE e = 3 AND tbl2.f = 1; 

// This works in both the original and the compacted one : 
SELECT a, b, c 
FROM tbl1 INNER JOIN tbl2 ON tbl1.d = tbl2.d 
WHERE e = 3; 

私はクエリを実行しようと、何も起こりません。アクセスプロセスは、ほとんどのCPUを使用し始め、GUIは応答を停止します。クエリエディタからクエリを実行すると、Ctrl + Breakを使用して実行を停止できます。私は多くの時間をクエリに与えようとしましたが、それは助けになりませんでした。

私は再びDBを圧縮しようとした(少なくとも、実行に永遠に取るべきではありません)私はshowplan.outでの実行計画をチェックしましたし、それが正しいようです。私は新しいDBにテーブルをインポートしようとしました。私はテーブルとそのデータをmdbファイルにインポートしようとしましたが、これは現在の状態(バックアップから)になっています。

誰でも知っていますか?

+0

2GBの制限に近いとは思いませんか? –

+0

@jmgant:いいえ、それから遠く、私は約50MBです。 –

+0

名前のオートコレクトを使用していますか? (トラック名オートコレクト情報、名前オートコレクトを実行してください) – JeffO

答えて

1

あるデータベースから別のデータベースにテーブルをインポートするときにどのようなタイプのメタデータが表示されるのかわかりません。メタデータが破損している場合は、別のデータベースにテーブルをインポートしても必ずしも問題が解決されるとは限りません。実用的であれば、まったく新しいデータベースでテーブルを作成してから、そのデータを新しいデータベースにエクスポートおよびインポート(またはコピーアンドペースト)してみてください。

このような小さなデータベースでは、このような表が壊れていることはありませんでしたが、Accessであれば何でも可能です。データに何か問題がありますか?

+0

あなたの提案をありがとう。私がこれを行うことができれば素晴らしいだろうが、私はそれらの間にたくさんの関係を持つ約60のテーブルがあるので、これを自動化する方法を見つける必要がある。 –

0

私は新鮮な(新しい名前など)クエリを作り直してみて、何が起こるかを見てみましょう。

コピーすることもできます(同じDB内でも新しいものであっても)コピーすることもできます。それがうまくいく場合、最悪のシナリオは、すべてのオブジェクトを新しいDBにコピーする必要があるということです。

+0

既にこれを試してみました。すべてのオブジェクトを新しいファイルにインポートしましたが、同じ問題が新しいファイルに存在しています。 –

+0

そして、新しいデータベースでそのクエリを新しく作り直して、同じテーブルにリンクしたら? – BIBD

-1

SQL Serverインストールにアクセスできますか?ツール - >データベースユーティリティメニューのアップサイジングウィザードを使用してデータをSQL Serverにコピーし、そこに同じ問題が発生するかどうかを確認できます。

+1

-1完全に役に立たない提案。 –

+0

うーん...私はそれが完全に役に立たないとは思わない。 SQL Serverインストールに簡単にアクセスできる場合、これはデータエラーの可能性を排除する比較的簡単な方法です。 –

+0

Eh?どのようにSQL ServerへのアクセスはJetデータベースのために何をするのですか? –

2

インデックスのようなサウンドが壊れていて、そのようなことが起こると、コンパクト中にドロップされます。 MSysCompactErrorsというシステムテーブルを確認します。ツール|ツールバーで非表示のオブジェクトやシステムオブジェクトを表示する必要があります。オプション| VIEW。

事前にバックアップを作成せずにJet MDBを圧縮しないでください。このルールのため、COMPACT ON CLOSE機能は完全に無意味です。キャンセルできないため、常にすべてのMDBで無効になっていることを確認します。

+0

+1良い提案。アクセスは、コンパクトで修復が単純なルーチン操作であるという印象を与えますが、わかるように、事態はひどく間違っています。 –

+0

確かに良い助言。しかし、この場合は、データファイルが破損しているため、修復する選択肢がなかったことを知る必要があります。つまり、問題の原因となったのはコンパクトだということです。なぜなら、(バックアップからの)ファイルの破損していないバージョンをコンパクトにしても、まだそれを得るからです。 –

+0

多くの場合、事前に圧縮された破損したデータベースのデータの大部分は読み込み可能です。あなたはDAOを介してそれを開き、あなたが失ったデータを読むことができるかどうかを見てみるかもしれません。これが成功するかどうかは、腐敗を引き起こした原因によります。 –

0

フィールドtbl2.fにインデックスがありますか?

また、データシートビューでそのテーブルに移動し、昇順でtbl2.fを並べ替えて、最初または最後のレコードに本当に奇妙なものがあるかどうかを確認してください。

関連する問題