アプリ版:「スタンプのみでお礼する」機能のリリースについて

 レコードの追加・削除を繰り返して重たくなったAccessデータベースを軽くするために、手作業で「ツール→データベースユーティリティ→最適化」とやっているのですが、これをExcelVBAで自動化したいのです。
 ADOのコマンドでできるのでは?と勝手に考えているのですが、どうなんでしょうか?
 ExcelVBAから可能でしたら、どのように書けばよいか教えてください。
 なお、ADOの知識は非常に乏しいのですが、「ConnectionオブジェクトやRecordsetオブジェクトを定義して、レコードの追加・削除を行う」程度なら分かります。(逆に言うとそれくらいしか分かりません…)
 平易な言葉でお教えいただけると助かります。よろしくお願いいたします。

A 回答 (3件)

こんにちは。

maruru01です。

つけたし程度ですが。
手順としては以下のような感じでしょうか。
Accessファイルを"db1.mdb"として、別に"temp.mdb"というファイル名を使用します。

1.temp.mdbファイルを削除する
2.Nameメソッドで、db1.mdb→temp.mdbに変名する
3.temp.mdb→db1.mdbに最適化する
4.次回最適化まで、temp.mdbはバックアップとして保存しておく

temp.mdbファイルは、最適化直後に削除してもいいんですが、タイミングによっては最適化中に削除を実行してしまい、エラーになってしまう可能性があるので、次回最適化直前がいいと思います。

あと、Accessのオプション設定で、「閉じる前に最適化する」という項目があるので、それをチェックしておき、いったん開いてすぐ閉じるという動作をすれば出来ます。
この場合は同じファイル名で最適化されます。
ちなみに、ファイルを開くには、Shell関数や、APIのShellExeCute関数を使用します。
閉じる場合は、自動化しようとするとちょっと面倒になりますが。
    • good
    • 1
この回答へのお礼

なるほど。
確かにバックアップファイルとして残すというのは、いい作戦ですね。
ファイルを開く2つの関数は知らなかったです。
ありがとうございました。
またよろしくお願いします。

お礼日時:2003/01/08 07:33

> ファイル名を変えなくても良い方法があったら


多分、無いと思います。
最適化後のデータベースファイルを削除しておいてから実行する、とかしかないのでは、と思います。
ごめんなさい。
    • good
    • 0
この回答へのお礼

とんでもないです。
非常に助かりました。
またお願いいたします。

お礼日時:2003/01/08 07:32

ExcelでACCESSのライブラリを参照させます。


その上で以下のコードを実行してみてください。
ただし詳細設定は未確認です。とりあえず最適化はできてます。
(WinME+Office2000の場合)
C:\DB1.mdb を C:\DB1_2.MDBにします。


1.ExcelVBAのメニュー[ツール]-[参照設定]をクリック。
2.[Microsoft Access 9.0 ObjectLibrary]にチェックを付ける。
3.以下のコードを貼り付けて実行。
Sub ACCESSの最適化()

Dim mdbSourceDB As String
Dim mdbTargetDB As String

'最適化対象のデータベースファイル
mdbSourceDB = "C:\db1"

'最適化後のデータベースファイル
mdbTargetDB = "C:\db1_2"

'最適化を実行する
DBEngine.CompactDatabase mdbSourceDB, mdbTargetDB

End Sub

これでとりあえずは最適化できますがチューニングはがんばって見てください。
    • good
    • 1
この回答へのお礼

 早速のご回答ありがとうございました。試してみましたら、うまくいきました。
 この場で申し訳ありませんが、もう一つ質問させてください。
 上記の回答では、最適化の前後でデータベースファイル名を変えなければならないと思うんですが、ファイル名を変えなくても良い方法があったらお教えいただけないでしょうか。
 「そんな方法は無い!」ということでしたら、その旨をお返事いただければ幸いです。よろしくお願いします。

お礼日時:2003/01/05 00:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A