大変参考にさせていただいております。
現在、テーブルにレコードを追加したりそれを削除したりするプログラムをつくっていますが、実行を繰り返すうちにデータベース(mdb)の大きさが大きくなっていってしまいます。Accessで最適化を行えばよいのですが、そのような手間を省くためにレコードを削除する際に完全に削除する方法はないのでしょうか?教えてください。
同じ構造のテーブルを作り、コピーして、元のテーブルを削除して
コピーしたテーブルの名前を元のテーブルの名前にするのはどうでしょう?
なるほど。いつも親切なアドバイスをありがとうございます。
ヘルプ等で調べましたが、次の操作の仕方がわかりません。
・同じ構造のテーブルの作成
・テーブルの削除
・テーブルの名前変更
HOtaさんに教えていただいたことが、ほとんど自分でできない状態なのですが・・・
お手数ですが教えてください。
mdbの大きさが 大きくなることには、変わりは無いですよ・・
逆に、テーブルを複製したサイズ分、どんどん肥大すると思います。
プログラムを終了する際とかに、最適化されては?
そのようなことができるのですか?やり方を教えていただくと有難いです。
環境がわかりませんが、方法はいろいろあると思います。
Delphi mdb 最適化とかで検索すれば 様々ですが
delphiのPGの中から、例えば終了時に行うのであれば
CompactDatabaseを呼び出せば目的の結果が得られると思います。
http://www.midnight-cat.org/memo/mdb.html
に、最適化のサンプルソールも公開されていますので
参考にされてはいかがでしょう。
そう言えば、別な質問で
>テーブルのデータだけをすべて消去してオートナンバのフィールドもゼロからはじめるようにするにはどうしたらよいでしょうか?
と書かれていましたが、データをすべて削除したテーブルは
MDBが最適化されることによって、1からスタートするはずですよ。
あわせて、ご確認を!
そうですね。MDBは一つのファイルになるのでした。
他のローカルDBと勘違いしました。
すみませんでした。
AYさんに教えていただいたページを試しにそのまま実行してみたところ、
JetEngine := OleVariant.Create('JRO.JetEngine');
のところでコンパイルができません。
[エラー] Unit3.pas(101): オブジェクトまたはクラス型が必要です
と表示されます。
Delphiのヘルプで調べてもCompactDatabaseが見つからずわかりません。
環境は
Delphi7pro
Access2003
windowsXP
です。
CompactDatabaseは、delphiではなくて、AccessのJetエンジンの機能ですのでHELPでは見つからないと思います。
私の環境はAccess2002(XP)ですが問題ありませんでした。
HPのソースでなく、ダウンロードできるソースを検証してみてください。
UsesにComObjが必要な部分や、OleVariant.Createの部分は、
CreateOleObject('JRO.JetEngine');ですね・・
私の環境でサンプルソースでは、最適化されました。
1.何かあってはいけないので 元.MDBを元_bak.MDBで保存
2.元.mdb 最適化で元NEW.mdb作成
正常に最適化後
3.元.mdb 削除
4.元NEW.mdbを、元.mdbにリネイム
の手順で仕込まれては 如何でしょうか?
GenMDBでAccess2000形式のデータベースを新規作成し、それに現在使用中のAccess2003のデータを
インポートしてから、Access2000形式のmdbファイルを最適化するとできました。
Access2003形式の方を最適化しようとするとエラーが出てしまいます。
この方法はAccessがインストールされている環境のみ有効な操作なのでしょうか?
私が触れるPCには すべてAccessが入っていますので、インストールされている場合のみ有効か検証できませんが、
http://e-words.jp/w/JetE38387E383BCE382BFE38399E383BCE382B9E382A8E383B3E382B8E383B3.html
にあるように、JetエンジンそのものはWindowsに含まれているのでOK
と思いますが・・
そのような環境がおありでしたら、実際にお試しください。
2003のエラーは?
http://www.microsoft.com/japan/security/security_bulletins/MS04-014e.asp
含まれている OSが明記されています。
2003のエラーは私の勘違いだったようです。CompactDatabaseを行なうときに、Accessを起動したままだったからエラーが出ていたようです。
また、Accessのインストールされていない環境でも正常に動作するようです。
ご丁寧なご指導ありがとうございました。
ツイート | ![]() |