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

起動していて、終わるとき右上の×マークをクリックしたとき最適化をして閉じたいのですがそんなことできますか?初心者なので、できれば詳しく手取り足取り教えてもらえたら光栄です。よろしくお願いします。

A 回答 (3件)

すでに回答が出ているとおり、Access97は終了時に最適化を行ってくれません。


私が業務で開発するMDBは以下のようにして実現しています。

A.mdb ---- いわゆる普通のDB
B.mdb ---- 最適化ユーティリティMDB
これらを同じフォルダに入れておく。
A.mdb内に作ったメニューフォームの[終了]ボタンを押すとB.mdbが起動した後A.mdbが終了。
B.mdbは同じフォルダ内にあるA.mdbを最適化する。

--------
1. A.mdbの[終了]ボタン クリックイベント

2. CurrentDB.Name でA.mdbのフルパスを取得
例: strFullPath = CurrentDb.Name

3. (2)のフルパスからファイル名を取り除いたパスを取得

4. SysCmd(acSysCmdAccessDir) でAccess.exeのパスを取得

5. (4)Access.exeのパスと(3)のパスと「B.mdb」を連結してShell関数にてB.mdbを起動する。
例:RetVal = Shell(strAccPath & "MsAccess.exe " & myParentPath & "B.mdb", vbMinimizedNoFocus)

6. A.mdbを終了。「DoCmd.Quit acQuitSaveNone」
--------

B.mdbの標準モジュールにPublic Subプロシージャを作成し、以下の処理を書く。
--------
1. 念のためForステートメントで空ループして時間を稼ぐ。
例:
For i = 1 To 5000
DoEvents
Next i

2. B.mdbのフルパスを取得。※A.mdbの(2)と同じ処理

3. (2)のフルパスからファイル名を除いたパスを取得。

4. Access.exeのフルパスを取得

5. 別名保存のための一時的なファイル名を作成する。

6. データベースを圧縮する。
例:
DBEngine.CompactDatabase myParentPath & "A.mdb", myParentPath & myTmpFileName, dbLangJapanese

7. A.mdbを削除する。
例: Kill myParentPath & "A.mdb"

8. 圧縮後のMDBをA.mdbにリネームする。
例: Name myParentPath & myTmpFile As myParentPath & "A.mdb"

9. B.mdbを閉じる
--------

なお、B.mdbで「マクロ」を作成し、アクション「プロシージャの実行」で対象を先ほどのプロシージャにします。
このマクロの名前を「AutoExec」としてください。起動すると自動実行されます。

以上のようにするわけですが、PCのスペックによっては失敗する可能性もあります。(今のところそういった報告は受けてませんが)
    • good
    • 0

Access97で最適化するにはVBからDAOを使って出来ますが開いているDBを最適化


する事は出来ません。

DBEngineオブジェクトのCompactDatabaseメソッドを使用します。

Private Sub Compact97MDB()
DBEngine.CompactDatabase "C:\Text\db1.mdb", _
               "C:\Text\db01.mdb",_
               dbLangJapanese,dbVersion30 
End Sub
こんな感じで別名にして最適化出来ます。

終わる時にVBからDAOを使って最適化してそのmdbをUpdateすれば可能だと思いますよ。
    • good
    • 0

Access2000以降は終了時に最適化する機能がついていますが、Access97にはありません。


初心者ということですから、何らかのツールをお使いになられた方がいいと思います。
ベクターのWindows95/98/Me> ビジネス> データベース> MS-Access用>
にこんなものがありました。
これでVBAからコールすることで最適化ができるようです。
(内容について保証する訳ではありません)

参考URL:http://www.vector.co.jp/soft/win95/business/se10 …
    • good
    • 0
この回答へのお礼

そうなのですか。ありがとうございました。勧めていただいたのはありがたいのですがシェアフェアなのでやめときます。すみません。

お礼日時:2002/10/28 15:08

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