hatena chips

MS Access Tips/Sample and Blog customize and Momoiro Clover Z etc...

«Newer カテゴリ内前後記事移動スクリプト | レポートでグループ毎に上位N件まで表示する Older»

タイマ時イベントで時刻判断するときの注意点

Category: Access-Form

指定した時刻になると処理を行うというコードで下記のようなコードを見かけることがあります。

これで良さそうに思えますが、実は、このコードには落とし穴があります。

難易度:

TimerIntervalを1000にしても、正確に1秒毎にイベントは発生するとは限りません。裏で重い処理などをしていると、1秒以上間隔が開くときもあります。それを確認するために下記のようなフォームを作成してみます。

非連結フォーム上に大きめのテキストボックス(txtLog)とコマンドボタンを2つ(cmdStart, cmdStop)配置します。

スタートボタンをクリックすると、1秒間隔で現在時刻をテキストボックスに挿入していくという処理です。下図が実行結果をキャプチャーしたものです。3:06:05 から 3:06:10 まで5秒間も間隔が開いています。

FrmTimerEvent.png

実はその5秒間の間、Accessのウィンドウのサイズをマウスで変更していました。設定した時刻にこのような操作や他にも重い操作、処理をしているとその時刻にイベントが発生せずに、実行したい処理も実行されない場合がでてくる可能性もあります。

このような危険を避けるために、ピンポイントで判断せずに、ある程度幅を持たせて時刻判断するといいでしょう。ただし、単純に幅を持たせると、その期間中繰り返し処理が実行されてしまいますので、期間中に一回処理がされたら、あとは実行されないようなロジックが必要になります。

下記は時刻判断に1分の幅を持たせたコード例です。

現在時刻が1分間の期間内と判断できたら、タイマ間隔を65秒に設定して、期間中はイベントは発生しないようにします。65秒後にイベントが発生したときに、タイマ間隔を1秒に変更します。

サンプルMDB が下記からダウンロードできます。
FrmTimerRun_07.zip (Access 2007 形式 - 20kb)
FrmTimerRun.zip (Access 2002-2003 形式 - 19kb)
FrmTimerRun_2k.zip (Access 2000 形式 - 19kb)


拍手する

関連記事


テーマ:MS-Access関係 | ジャンル:コンピュータ | タグ: Access Form VBA Timer

  1. EDIT
  2. 2010/05/18(火) 23:59:51
  3. | トラックバック:0
  4. | コメント:0
  5. | ▲PageTop▲
«Newer カテゴリ内前後記事移動スクリプト | レポートでグループ毎に上位N件まで表示する Older»

コメント

コメントの投稿


トラックバック

トラックバック URL
この記事にトラックバックする(FC2ブログユーザー)