Q.よく「破損した」って言いますけど、破損するとどうなるんですか?

よく、開発の掲示板とかメーリングリストとかで、「それは mdb ファイルが壊れてますね」っていう返事がくる質問、あるじゃないですか。ああいうのって、私がその質問読んでも「壊れてる」とはわからないんですが、「壊れてる」ってどういう状態なんでしょう?Access が自分で「壊れてます」って言ってくれるならいいんですけど...

ほんとですねぇ。でも、開くときに「破損してます」とか言われることありますが、それでも「これってどういうことなんでしょう?」って質問してる人もいますから、Access 自ら破損をカミングアウトしても無駄なヒトには無駄なのかも。

mdb が「破損」したとき、どういう症状になるのか?
...わかりません。(爆) だって、壊れてる んですよ?なにがおきたって不思議じゃないでしょ?
突然「ばーかばーかばーかうけけけけけけ」とか言い出したり、画面にハートマークが踊りまくったり、いきなり Word を立ち上げてラブレターを書き出したりといったことがおきたって不思議じゃありません。(不思議だよ)
なんたって壊れているんですから、何がおきるかなんてわかったもんじゃありません。

たとえば、テレビが壊れたときを思い浮かべてください。「スイッチ押したのに電源が入らない」とか、「電源ランプはついてるのにブラウン管に何も写らない」とか、「アンテナは正常のはずなのにノイズがひどい」とか。だいたいこのテの障害が起きれば「あー壊れたのかも」って判断がつきますわな。
しかし、Access はそうはいきません。mdb が壊れたからって画面にノイズが出ることは(たぶん)ないでしょうし、電源スイッチ押しても起動しないなんて症状にはなりません。
たいていの場合、「ワケわからん」現象が起きてあちこちいじりまくり数時間悩んだ後、ついに開くこともできなくなったーってなパターンが多いんじゃないでしょうかね。

じゃあ、みなさんどうやって「破損」かどうか判断してるのか。正直、こればっかりは「慣れ」です。 テレビの故障の判断だって、テレビジョンが普及して数十年、生活に無くてはならない家電製品として定着したからこそ、多くの人が「故障」を「故障」と判断できるようになったわけで。(どうしてそんなに家電が好きなんだろう?)
なぼのばあいは「ここでそんな動作するなんて、正常な状態ではありえない」と判断したときに「壊れてますね」って返事しますね。そんなの、正常な状態でどう動くかわからなけりゃお話になりません。なぼだって、Excel のファイルが破損したかどーかの判断は絶対無理だもん(^_^; 結局のところ慣れるしかないと。

そーはいっても、思ったとおりに動かないのがはたして破損なのか自分のミスなのか、自分で判定できなきゃ困りますよね。慣れるのを待ってたらシゴトになりませんって人だっているでしょう。また、そのたんびにあちこちの BBS やらメーリングリストやらへマルチポストしまくって「破損ですか?破損ですか??」って聞きまくるってのはほぼ犯罪に近いし。
じゃあ、どうやって判断するか。ちょっとだけポイントを...

  • とりあえず、修復とか最適化とかしてみて現象が出なくなるか試す

    これ基本中の基本。でもそのまえに必ずバックアップ取ってね。
    こういう資料も MS から公開されてます。

    [AC97] 破壊したデータベースの修復方法
    [ACC2000] 破壊したデータベースの修復方法
    Access ファイルの最適化と修復について(Access 2003 ヘルプ)

  • それでもだめなら、同じようなものを新規に作ってみて現象が出なくなるか試す

    その現象がもし Access のバグまたは仕様なら(別にこれはイヤミじゃないです。もし仕様に基づいた動作なら自分のミスって可能性もあるし)、新しい mdb で新しく作ったオブジェクトでも、同じように作れば必ず同じ現象が起きるはずです。もし、新しいほうではマトモに動いちゃって再現ができないのであれば、「あー破損だったのね」ってことで納得?してもいいかと。
    「もう一回最初から作り直すの~~??うげ~、めんどくせー」と思うかもしれませんが、たとえばコンボボックスで現象が起きているなら、そのコンボボックスだけを新しいフォームに作ってみればいいじゃないですか。で、徐々にもともとのフォームへ近づけていく。そうすれば、どこをどう修正したときに現象が出るようになるのかバッチリわかりますよね。
    まず問題がどこにあるのかを見極めるっていうのはヒジョーーーに重要なことです。破損かどうか判断するってことよりも先に別の力がついていくと思いますので、回り道だとか思わずに徹底的に調査することをお勧めしますね。

ってゆうか、最適化はおろか開くことも他 MDB からインポートすることもできないし、どうしょもないよ(泣)

うーん、困りましたね。これって参考になります?

 

最後に、「掲示板とかで見かける、よくある破損のパターン」をちょっとご紹介しませう。

  • 「直前の操作がキャンセルされました」ってエラーが出てフォームが開けない。

    [ACC2000] フォームで「直前のコマンドがキャンセルされました。」エラーが発生

    昔これで泣かされた。。。。
  • 「権限がありません」とか言われて mdb やテーブルそのものが開けなくなった。

    権限とか設定した覚えもないのにこんなエラーが出た場合、まぁ 9 割方破損ですね。
    このテのエラーはテーブルや mdb そのものを開くときに限らず、なにをどのビューで開くときにも起こります。これはクエリーだから破損じゃないやという判断はできません。ポイントは「権限を設定した覚えがないのに」ってところですのでお間違えなきよう。
    しかも、このタイプのエラーがでた場合、修復できる可能性がわりと低めです(^_^; mdb 開くときにこのエラーが出た場合は新規 mdb へのインポートもできないことが多いですから、カナリショックでかいですね。
    バックアップはこまめにとっときましょう。エクスプローラでくきっとコピーしとくだけでいいんです。HDD 容量が許す限りとりましょう。
  • VBA 実行したら、ブレークポイントの指定なんかしてない部分で一時停止しちゃう

    これもぁゃιぃです。そのモジュール全部クリップボード経由でメモ帳などに一旦コピーして、新しいモジュールとして復活させましょう。ぁゃιぃモジュールから直接コピーしてはダメみたいですのでご注意を。ポイントは「いったんテキストエディタへコピー」するところ。
  • なんかしらんけど一般保護違反がよく出る...

    いまは「Access に問題が発生しました。ご迷惑をおかけいたしまして云々」って言うのか?
    外部 DLL なんかを Declare して使ってるとか、サブクラス化してるとか、そうゆうことでもしてない限りこのテのエラーはまず出ません。一度でも出たら壊れたと思ったほうがいいと思います。ま、それまでなんでもなかったとしても、コレが出て強制終了したらそれだけで壊れちゃうよな(^_^;
  • よくわかんないけど「システムで予約されたエラー」とか言うのが出る

    これって Jet のエラーらしいんですけど、こんなワケわかんないエラーが出るってこと自体、想定外の事態が起こったと判断してさしつかえないでしょう。まぁ、それって、たいがいの場合が破損ですわな。
    何度作り直しても何度でも再現する場合はとっととMS サポートへ文句言いましょう。直るかどうかは知らないけど。たぶん直らないけど。
  • なんにも言わないで Access 自体が終わっちゃった!ってゆうか消えちゃった!

    Office XP は「謝る」のがウリだったんじゃないんかいっなんてことを言っていても仕方ないので、これも一般保護違反が出たのと同じだと思って諦めましょう。
  • 「xxxxx」というエラーが出てデザインで開けない!

    「xxxxx」はてきとう(^^;;
    Access の場合、正当な理由があってデザインで開けないときには、その理由がとってもわかりやすいエラーメッセージによってしっかりと説明されます。これを読んで自らの状況がよくわからないということは通常の状態ではありえません。(たぶん)
    たしかに Access 2000 以降のヘルプは使いにくいけど、メッセージボックスで表示されるエラー内容はかなり細かくてツッコんだ説明されてるし、わかりにくいものではないと思うけどなぁ。

    上記「直前の操作がキャンセルされました」もそうなんですが、こんなエラーがデザインで開くときに出るはずがありませんよね。もし、VBA やマクロに問題があるんであれば、デザインで開けなきゃどーやって修正すんのさ。
    こんな場合はまず 100% 破損でしょう。「エラーメッセージやヘルプ読んだけどよくわかりません」なんてのは論外、本屋行って国語辞典でも買ってきなさい。
  • その他、な~~~んか思ったとおり動かない...

    たいていの場合は作ってる人の勘違いである場合が多いですけど、破損って可能性がないわけではありません。自分は絶対だと思ってる人も自分が一番信用できないと思ってる人も、ハマる前に破損は疑ってみてもいいと思いますよ。新規 mdb へインポートとか、そんなに大変な作業じゃないでしょ。

 

破損って奴ぁいつ起きるかわかりませんので、何度も言うようですが、やっぱり重要なのはバックアップですね。
でもねぇ、取ってないときに限って、壊れたりするんだよなぁ...(T-T) ← Access ではあまり無いけど、Excel では相当壊してる

トラックバック(0)

トラックバックURL: http://www.naboki.net/movabletype/mt-tb.cgi/34