- 締切済み
Accessが不良です
現在アクセスを使用しているのですが、正常に立ち上がりません。 起動時の設定をしているのですが、実行しないでアクセスだけが立ち上がります。 最適化を実行すると Microsoft Accessを終了できません。 OLEまたはDDEを使うVisual Basic モジュールを実行している時は、モジュールの実行を中断する必要があります。 というメッセージが出ます。 OSはXPで、ACCESSは2000です。 尚、パソコンは自作です。 ファイルサイズは 64MBあり、フォームの数はサブフォームをいれると50ぐらいあります。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1910185 で#5の方法は試されたでしょうか?
特殊な状況だと考えます。原因を切り分ければ 1.PCが壊れている 2.OSが壊れている 3.アクセスが壊れている 4.MDBの中に異常な部分が紛れ込み除去できない など。1.2.及び3.はPCを変更してみることで確認できるでしょう。4.は最適化の方法で何かあったような気がしますが、現在判りません。 ところで、この「教えて!goo」は、質問が古くなると、読む人は激減します。多分、貴「補足」も、読んでいるのは私だけでしょう。現状をまとめ直して、新質問された方が良さそうです。蛇足かもしれませんが(^^;
何とも酷い開発状況のようで、同情いたします。私であればとっくに投げ出していると思います。 で、アドバイスできることはほとんどない(長いことアクセス開発環境は使用していないし、それ以前もウィザードは使ったことがない)のですが。 >他のデータベースへ移行して、VBでやるしかないのか 「他のデータベースへ移行」する必要は必ずしもないと考えます。私の場合フロントエンドはデルファイでDBはMDB(Jet)を使用しています。複雑なSQL文はアクセスのクエリで作成、試験後SQVビューでテキストに直しています。他の方法は知りませんが、取り敢えず満足しています。 ともかくDBを替えなければ、部分的に他言語に移行してゆくことができるので、そこら辺にメリットがありそうです。 ところで、今夜から一週間ほど旅に出るので、その間は反応できませんのであしからず(^^;
お礼
返事が遅くなり失礼しました。 現在は、DBを分割して、処理を続行しております。 フォームとクエリの入ったDBのサイズは55MBです。 適当にフォームを作ってファイルサイズを100MBぐらいにしてみたのですが、OKでした。 問題は、DB間のオブジェクトコピーにもありました。 モジュールに作成したものを、他のデータベースにコピーすると、コピーされたDBが死んでしまうというのは何とも言いようがありません(情けないです、情けない限りです)。 最初はフォームのコピーだけだと思っていましたが... 何度も何度も回答を頂きありがとうございました
>以前作られたDBのサイズはいくらぐらいでしたのでしょうか? 更に、データとそれ以外(フォームやクエリ)の割合はどのぐらいでしょうか MDB A B サイズ 11.5mb 6.8mb テーブル 57 40 フォーム 58 63 レポート 13 20 でした。 >フォームを削除してもコードが残ってしまうのです アクセス自体のバグである可能性もありそうです 以前、完全にデータとフォーム、クエリ、レポートを分離したアプリケーションを作成したことがあります >テーブルの変更も頻繁に出てくるし、 二つのMDBを、同時に開いておきます。テーブルの設計変更は、そのままリンク側に反映されます。ほとんど一つのMDBを操作しているのと同じ感じです >レコードセットにクエリーを使おうとすると これも、リンクテーブルと自前のテーブルで、クエリ側から見て差はありません
お礼
またまた早速の回答ありがとうございます。 テーブル数やフォーム数はあまり変わりませんね。 私のにはレポートはありません。 帳票は、アクセス側からCSVデータを吐き出し、更にEXCELを呼び出して、Excelで作成しています。 フォームを削除してもコードが残る件ですが、前述したように、リンクフィールドを2つ使ったもので、サブファイルはフォームに無くてもレコード上にあれば問題ないのですが、親のフォームには、そのリンクフィールドがないとエラーになるようなのです。ウィザードで作成する時、元になるテーブルやクエリーを選択しても、非連結で使っているからかな、と思います。 DBは作成中なので、これを忘れて、DBを、保存してしまいます。 そうすると、次回、立ち上げると 早速 「イベント プロパティに指定した式 開く時 でエラーが発生しました。 ファイルへのアクセスでエラーが発生しました。 ネットワークへの接続が切断されている可能性があります。」 と、出ます。 更に、コードを開こうとすると、 「ファイルへのアクセスでエラーが発生しました。 ネットワークへの接続が切断されている可能性があります。」 と、出て、 コードを修正しようとしても、修正することが出来ないのです。 で、実際にはサーバーを共有して、アクセスを動かすのですが、ネットワークへ接続しなくても、正常に動いているフォームはいくらでもあるので、このエラーの意味がわからず、とても苦労しました。 いや、まだ苦労しています。 このエラーが出ると、もう、このDBは修正不可能になるので、前に戻るしかなく、最新のバックアップを使って、もう一度やり直す、という事を何度も繰り返してきました。 エラーになるのは、DBを作成中なんだから、当然なはずなのに、修正できないなんていうのは、アクセスのバグですよね。 この問題を解決しない限り、これ以上増やすのは限界で、後は、他のデータベースへ移行して、VBでやるしかないのか、と思っています。 で、私のフォームのコードの総数なんですが、42本で、スペース行は抜いて、コメント行も含めれると、ステップ数は16000行ぐらいあります。多いので1454行、500行を越えるものが11本あります。 このぐらいでは、限界じゃないと思っているんですが....
#2です。最近はアクセスのフォームをほとんどいじっていないので、あまりお役に立てそうもありませんが(^^; 1.過去に関わったものを調べたところ、フォーム数58と63のものがありました。当時勤務していた会社で、日常的に使用していたものですが、ご質問のようなトラブルは記憶にありません 2.こまめにバックアップを取っておられるようですが、「問題発生前」と「後」での差を分析できないのでしょうか? 3.#3のお礼で、フォームとデータ(テーブル)を分けることを考えておられましたが、これを進めてゆけば「フォーム群」とデータにできる、要するに関連の深いフォームをひとまとめのMDBにして、これを複数使用することはできないのでしょうか?上手く行けばメンテナンスも楽になるかも。
お礼
早速、また回答を頂いてありがとうございます。 ちなみに、以前作られたDBのサイズはいくらぐらいでしたのでしょうか? 更に、データとそれ以外(フォームやクエリ)の割合はどのぐらいでしょうか? 今回の、アクセスに関しては、今までに無い現象がありました。 それは、フォームを削除してもコードが残ってしまうのです。 そうすると、もう更新が出来なくなってしまいました。 原因は正確には分からないのですが、そのフォームは、決まってサブフォームを取り込んでいて、前述したように連結キーが2つあったのですが、その設定が上手くいっていなかったフォームでした。 今回も、不要なフォームをとりあえず外そうとして、同じようなフォームを削除したら、同じエラーとなってしまいました。 フォームとテーブルの分割は考えましたが、システムが確立するまでは、テーブルの変更も頻繁に出てくるし、レコードセットにクエリーを使おうとするとDBをコード内で別に指定する必要があったような気がしたし、テーブルをリンクすると、バックアップの取り方にも工夫が必要なので、却って面倒くさくなると思い、落ち着いてからやろうと思っていました。
説明されていることから状況を推定すると 1.起動時の設定によるモジュール(?)がエラーを起こしている 2.何らかの理由でこのモジュールは終了できない 3.それ故に最適化できない(モジュールを実行している時は、モジュールの実行を中断する必要があります) なので、「起動時の設定」をやめて、最適化できないでしょうか? >フォームのDBのサイズに制限があるような気がしますがどうなのでしょうか? 根拠を示して否定はできませんが、通常あり得ないと考えます。
お礼
回答ありがとうございます。 今度、同じような事が起きたら、「起動時の設定」をやめて、最適化をしてみます。 これからも、更にフォームが増える予定です。 その対応として随時バックアップを取っておき、いつでも前に戻れるようにして置こうと思っています。 ですが、前回までは、余計なフォーム(コピーしてとっておいたものが殆どですが)を削除して対応してきましたが、現在は、すべて必要なものばかりです。 フォームのサイズに制限がないとすれば、フォームの作り方、コードの書き方に問題があるとしか考えられないですよね。 ちなみに、サブフォームはすべて2つのフィールドを連結しています。
- platina_24
- ベストアンサー率24% (63/253)
別のAccessファイルを作り、全てのテーブル、クエリ、フォーム等をインポートしてもう一度起動時の設定をしてみては。
お礼
やはり、その方法しかないのですか? 数が多いので大変なんです.... フォームのコードの頭に Public で Recordset を定義していますが、今はテーブルをそのままなんです。 これを、実際に使用するフィールドだけのクエリにするとファイルサイズが小さくなるんでしょうか? 現在は、バックアップを取ってあるので、いらないフォーム等を削除して、最適化を行い、それに更新をかけて少しでも小さくしています。 でも、これだと直ぐにでも「保存できない」状況になりそうです。 100MBぐらいのDBはざらにあると聞いていますが、現在は、フォームとテーブルを一緒に入れてあります。 これを分割した場合、 データだけのサイズは大きく出来ても、もう一方のフォームのDBのサイズに制限があるような気がしますがどうなのでしょうか?
お礼
返事がまた遅れてしまいました。 この方法は試してみましたが、やはりダメでした。 アクセスの環境については、近いうちに新しいパソコンでOffice Pro 2003 でやるしかないのかな と思っています。 いろいろとありがとうございました。 なお、#6のお礼も今回でさせていただきます。