MS Access Tips/Sample and VBA and Blog customize etc...

100分の1秒のデータを扱いたい

スポーツ競技等で計測タイムを100分の1秒までの精度で格納して、集計処理したいのですがどうしたらよいでしょうか。

日付/時刻型だと秒単位までしか扱えませんし、時刻を表現するものですので、時間を扱うのには適しません。Accessには時間を扱うデータ型はないので、数値型のフィールドに1/100秒単位で格納して、表示/入力の部分はVBAで制御することになります。

FrmTime.png

難易度:

フォームでの表示は、1:01:01.99 というように表示、入力して、テーブルにはミリ秒単位で 366199 という値を長整数型のフィールドに格納するという仕様にします。

"1:01:01.99"というように入力した文字列を変換せずにテキスト型のフィールドに格納すると、集計したり計算したりするのが複雑かつ重い処理になるのでさけました。数値型なら、ラップタイムを計算したり、平均タイムを計算したりという処理がシンプルになります。

まずは、0:00:00.00書式の文字列と ミリ秒単位の数値 を相互変換する関数を標準モジュールに作成します。

テーブルには長整数型のフィールド「計測タイム」を作成しておいてそこに計測タイムを格納します。

このテーブルから単票フォームを作成します。レコード移動時にフィールド値を0:00:00.00書式に変換して非連結のテキストボックスに代入します。また、テキストボックスの更新後処理でテーブルのフィールドに1/100秒に変換して代入します。

計測タイム表示用のテキストボックス(txt1)を下記のように設定しておくと、1:01:01.99 なら 1010199 というように数字のみ入力すればいいので、入力を楽できます。

プロパティ 設定値
コントロールソース   
定型入力 9\:99\:99\.99;0;_ 
自動タブ  はい 

サンプルでは中間タイムも格納して、ラップタイムを計算して表示するようになっています。

サンプルのフォームモジュール ラップタイムを即反映させるために、更新後に再計算(Recalc)しています。

今回は単票フォームの例ですが、次回は帳票フォームで一覧表示して入力も可能なものを作成する予定です。

サンプルMDB が下記からダウンロードできます。
VBAMilliSecond_07.zip (Access 2007 形式 - 30kb)
VBAMilliSecond.zip (Access 2002-2003 形式 - 30kb)
VBAMilliSecond_2k.zip (Access 2000 形式 - 28kb)

拍手する

1 Comments

黒木 says..."ちょうど探していました"

一輪車大会の競技でタイムのデータベース作成でちょうど探していた内容の記事でした。

早速、サンプルをダウンロードして確認します。
ありがとうございました。

2010.07.01 16:35 | URL | #v.WrtRVI [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/227-f9451d1e
該当の記事は見つかりませんでした。