投稿日 | : 2003/12/26(Fri) 12:18 |
投稿者 | : ak |
Eメール | : |
URL | : |
タイトル | : Re: QueryUnloadとUnloadModeについて |
> VBとSQL-SERVER2000でC/Sシステムを構築しています。アプリの起動時にDB上にログを書込み
> 終了時にログを削除するというものです。しかしユーザーによっては、フォームをタスクバーに
> 隠したままWindowsの終了をしてしまうようなアホがいて、ログ情報が消えずに残ります。
最初に言っておきますが、エンドユーザーの事を『アホ』と言うのは如何なものかと
思いますよ。
PCの知識のあまりない人でも簡単に使用できるアプリケーションを構築するのが
我々技術者の腕の見せ所です。こんな事も分からないのかと思っているうちは良い
システムは構築できないでしょう。
> で、FORMのQueryUnloadイベントにWindowsの終了によってフォームが閉じられた場合、ログ削除する
> という命令をコーディングして、うまくいきました!同じようにタスクマネージャから閉じられる時
> にもログ削除するようにしているのですが、削除されません。 どうしてなんでしょう?
> Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
>
> If UnloadMode = vbAppWindows Or UnloadMode = vbAppTaskManager Then
> Call ログ削除
> End If
>
> End Sub
デバッグは行ったのでしょうか?
答えから言っておくと、タスクマネージャーから終了されようが、ウィンドウズが終了されようが
終了時に必ずQueryUnloadイベントは発生します。もちろんUnloadModeもそれぞれの値が入ってきます。
但しQueryUnloadイベントの発生順はロードされた順に発生します。
例えばログ削除処理を行っているフォームの前にロードされたフォーム内で終了処理(End)を
しているとログ削除処理を行っているフォームのイベントは発生しません。
フォーム単体でテストしてみてください。
ちゃんとイベントが発生しUnloadModeも値が入ってきているはずです。
ということはそちらのプログラムのバグの可能性が高いです。
ログ削除処理のあるフォームのQueryUnloadイベントにたどり着くまでに他のフォームのイベントで
終了処理(End)されているとかエラーで落ちているとか原因は色々考えられます。
それらの問題を全てテストした上でQueryUnloadイベントがおかしいというのなら分かりますが
テストせずにQueryUnloadイベントの質問をするのはどうかと思います。
まず自分の作ったプログラムを疑ってかかるべきです。
エンドユーザーの事を『アホ』と言う前にプログラムに対する取り組み方を見直した方が良いと
思いますよ。