みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

最適化後のサイズがあんまり変わりません。

こんにちは。
先日、Accessにてリンクテーブルの削除、dbの最適化、リンクの張りなおしについて質問させていただいたものです。
結局、リンクテーブルを削除しなくても最適化ができましたので、とりあえずOKなのですが、最適化後のdb のサイズについて質問があります。

最適化の方法としては、メニューにあるボタンを押したら、
1.元データ(a.mdbとします)のバックアップ(bk.mdbとします)を取る(filecopyで行っています)
2.a.mdbの最適化を行います(最適化してできたdb をwk.mdbとします)。
3.wk.mdbをa.mdb元データの名前でコピーします。
4.wk.mdbを削除します。

実験のために、元のa.mdbのサイズを大きくして、上記の処理を行ってみたのですが、dbのサイズがほんのちょっとしか小さくなっていません。何回やっても同じです。
しかし、直接a.mdbを開いて、ツール→データベースユーティリティ→最適化 を行うと、びっくりするほどサイズが小さくなるのです。

これでは、最適化をメニューにつける意味がありません。しかし、ユーザーがa.mdbを直接開くことは避けたいので、解決策をご存知の方がいましたら、回答よろしくお願いします。

ちなみに、データ用のDTとそれ以外のプログラムのDTは分けています。Access2000、ADOで使用したいです。

投稿日時 - 2003-07-31 11:46:54

QNo.615972

暇なときに回答ください

質問者が選んだベストアンサー

今、過去質問を見てきたのですが、
最適化しようとしているのはデータ.mdbの方ですよね。とすると、テーブルリンクしているだけのこのmdbのオブジェクトが肥大するということはないんじゃないでしょうか? 

実施されたテストでは、何らかの方法でmdbのファイルサイズを大きくされたようですが、その過程でゴミが溜まり、その分がオブジェクトの最適化できれいになったという現象ではないでしょうか。

>データベースとオブジェクトを最適化するコマンド

・・・につきましては、他のmdbに対しての方法はないと思います。

というわけで、処理としてはこのままでよいと思います。ユーザに配布する前にメニューから「最適化」を実行し、運用中はVBAからCompactDatabaseを終了時に実行ということでよいのではないでしょうか。

なお、蛇足ながら

>3.wk.mdbをa.mdb元データの名前でコピーします。
>4.wk.mdbを削除します。

・・・という処理は、良くある最適化の手順では

>3.a.mdb を削除
>4.wk.mdb を a.mdb にリネーム

という手順をとることが多いようですよ。
 

投稿日時 - 2003-07-31 13:30:03

お礼

こんにちは。わざわざ以前の質問を見てくださったのですね。ありがとうございます。
書き方が悪くて失礼しました。私の質問の中であげているa.mdbというのは、テーブルのみが入っているdbのことで、プログラムを格納しているdbを肥大化させたということではありません。オブジェクトを最適化するコマンドはないのですね。わかりました。
それと、最適化の手順を書いていただきましたが、こちらのやり方のほうがメリットがあるのでしょうか?(データベースが壊れにくい、とか)質問攻めですみません。

投稿日時 - 2003-07-31 14:48:00

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>こちらのやり方のほうがメリットがある

いやぁ、余計なこと書いちゃいましたかね~。
多分どっちでもいいんでしょうけどね。
(だったら言うな!(笑))

私自身が、その他の処理でも[削除]→[リネーム]のやり方を良く使うのと、ちょっと参考に覗いたいくつかのサイトでの最適化処理でも全てがこっちのやり方だったので・・・

ちなみに本職プログラマーの方が[コピー]→[ワーク削除]としている例もありました。

厳密言えば [削除]→[リネーム] の方が処理が早そうな気もしますが・・・。

投稿日時 - 2003-07-31 15:29:44

お礼

こんにちは。何回も回答してくださって、ありがとうございます。今回は、あまり工数をかけられないので、今のままで良しとします。どうもありがとうございました。

投稿日時 - 2003-07-31 18:27:16

ANo.1

「最適化」というのが、VBAから CompactDatabase を実行ということでしたら、これはメニューの「最適化」とは別の動作です。

メニューの「最適化」→ データベースとオブジェクトを最適化

CompactDatabase → データベースだけを最適化

当然、結果としてのファイルサイズも異なることになります。

投稿日時 - 2003-07-31 12:53:44

お礼

こんにちは。早速の回答ありがとうございます。CompactDatabaseがデータベースのみ最適化するなんて知りませんでした。あつかましいですが、メニューの最適化同様、データベースとオブジェクトを最適化するコマンドをご存知でしたら教えていただけないでしょうか?(オブジェクトのみでも、CompactDatabaseとあわせてやれば問題ないですよね?)

投稿日時 - 2003-07-31 13:03:57

あなたにオススメの質問