データベースからテーブルの内容を完全に削除するには?

解決


りょう  2004-11-29 20:50:37  No: 11967  IP: 192.*.*.*

大変参考にさせていただいております。
現在、テーブルにレコードを追加したりそれを削除したりするプログラムをつくっていますが、実行を繰り返すうちにデータベース(mdb)の大きさが大きくなっていってしまいます。Accessで最適化を行えばよいのですが、そのような手間を省くためにレコードを削除する際に完全に削除する方法はないのでしょうか?教えてください。

編集 削除
HOta  2004-11-30 06:09:53  No: 11968  IP: 192.*.*.*

同じ構造のテーブルを作り、コピーして、元のテーブルを削除して
コピーしたテーブルの名前を元のテーブルの名前にするのはどうでしょう?

編集 削除
りょう  2004-11-30 11:29:00  No: 11969  IP: 192.*.*.*

なるほど。いつも親切なアドバイスをありがとうございます。
ヘルプ等で調べましたが、次の操作の仕方がわかりません。
・同じ構造のテーブルの作成
・テーブルの削除
・テーブルの名前変更
HOtaさんに教えていただいたことが、ほとんど自分でできない状態なのですが・・・
お手数ですが教えてください。

編集 削除
AY  2004-11-30 11:58:16  No: 11970  IP: 192.*.*.*

mdbの大きさが  大きくなることには、変わりは無いですよ・・
逆に、テーブルを複製したサイズ分、どんどん肥大すると思います。
プログラムを終了する際とかに、最適化されては?

編集 削除
りょう  2004-11-30 12:15:30  No: 11971  IP: 192.*.*.*

そのようなことができるのですか?やり方を教えていただくと有難いです。

編集 削除
AY  2004-11-30 12:37:40  No: 11972  IP: 192.*.*.*

環境がわかりませんが、方法はいろいろあると思います。
Delphi mdb 最適化とかで検索すれば  様々ですが
delphiのPGの中から、例えば終了時に行うのであれば
CompactDatabaseを呼び出せば目的の結果が得られると思います。
http://www.midnight-cat.org/memo/mdb.html
に、最適化のサンプルソールも公開されていますので
参考にされてはいかがでしょう。

編集 削除
AY  2004-11-30 12:43:27  No: 11973  IP: 192.*.*.*

そう言えば、別な質問で
>テーブルのデータだけをすべて消去してオートナンバのフィールドもゼロからはじめるようにするにはどうしたらよいでしょうか?
と書かれていましたが、データをすべて削除したテーブルは
MDBが最適化されることによって、1からスタートするはずですよ。
あわせて、ご確認を!

編集 削除
HOta  2004-11-30 16:56:23  No: 11974  IP: 192.*.*.*

そうですね。MDBは一つのファイルになるのでした。
他のローカルDBと勘違いしました。
すみませんでした。

編集 削除
りょう  2004-11-30 17:48:27  No: 11975  IP: 192.*.*.*

AYさんに教えていただいたページを試しにそのまま実行してみたところ、
JetEngine := OleVariant.Create('JRO.JetEngine');
のところでコンパイルができません。
[エラー] Unit3.pas(101): オブジェクトまたはクラス型が必要です
と表示されます。
Delphiのヘルプで調べてもCompactDatabaseが見つからずわかりません。
環境は
Delphi7pro
Access2003
windowsXP
です。

編集 削除
AY  2004-11-30 19:33:06  No: 11976  IP: 192.*.*.*

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にリネイム
の手順で仕込まれては  如何でしょうか?

編集 削除
りょう  2004-12-01 10:50:31  No: 11977  IP: 192.*.*.*

GenMDBでAccess2000形式のデータベースを新規作成し、それに現在使用中のAccess2003のデータを
インポートしてから、Access2000形式のmdbファイルを最適化するとできました。
Access2003形式の方を最適化しようとするとエラーが出てしまいます。
この方法はAccessがインストールされている環境のみ有効な操作なのでしょうか?

編集 削除
AY  2004-12-01 12:08:42  No: 11978  IP: 192.*.*.*

私が触れるPCには  すべてAccessが入っていますので、インストールされている場合のみ有効か検証できませんが、
http://e-words.jp/w/JetE38387E383BCE382BFE38399E383BCE382B9E382A8E383B3E382B8E383B3.html
にあるように、JetエンジンそのものはWindowsに含まれているのでOK
と思いますが・・
そのような環境がおありでしたら、実際にお試しください。
2003のエラーは?

編集 削除
AY  2004-12-01 12:13:59  No: 11979  IP: 192.*.*.*

http://www.microsoft.com/japan/security/security_bulletins/MS04-014e.asp
含まれている  OSが明記されています。

編集 削除
りょう  2004-12-02 16:03:21  No: 11980  IP: 192.*.*.*

2003のエラーは私の勘違いだったようです。CompactDatabaseを行なうときに、Accessを起動したままだったからエラーが出ていたようです。
また、Accessのインストールされていない環境でも正常に動作するようです。
ご丁寧なご指導ありがとうございました。

編集 削除