Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル24時間以上の表示
記事No172219
投稿日: 2018/04/06(Fri) 10:18
投稿者tam
OS:
Access Version:2013
詳しい方教えてください。最近、テーブルの「日付/時刻」型では24時間以上の表示ができないことを知りましたが、時間を計算するうえでどうしても24時間以上の表示が必要です。
例えば、あるシステムの不具合発生時間と仮復旧、復旧時間がテーブルに入力されていて、発生から復旧までにかかった時間を計算する場合、復旧に2,3日かかることもあるためどうしても機能停止時間が24時間以上になることが多いです。
クエリを使って単純に計算することはできるのですが24時間以上の計算がわかりません。復旧または仮復旧から発せ時間を差し引いて機能停止時間を算出し24時間以上(例えば200hとか)の表示にするにはテーブルやクエリをどうしたらよいか教えてください。
宜しくお願いします。

タイトルRe: 24時間以上の表示
記事No172220
投稿日: 2018/04/06(Fri) 10:49
投稿者ナバ
こんにちは。

> クエリを使って単純に計算することはできるのですが24時間以上の計算がわかりません。復旧または仮復旧から発せ時間を差し引いて機能停止時間を算出し24時間以上(例えば200hとか)の表示にするにはテーブルやクエリをどうしたらよいか教えてください。

〜h、だけでよいのであれば、クエリーでDateDiff関数を使い、二つの時刻の間隔を時間単位で表示できます。

停止時間: DateDiff("h",[発生時間],[復旧時間])

タイトルRe^2: 24時間以上の表示
記事No172221
投稿日: 2018/04/06(Fri) 14:29
投稿者tam
ナバ様、早速のご回答ありがとうございます。ご指摘いただいた通りで可能だと思います。
ただ、2つ問題がありまして、テーブルの日付と時間のフィールドが別になっています。一つのフィールドに日付と時間が一緒に入力されていればすぐに済むのですが。発生日、発生時間、復旧日、復旧時間、と分かれています。今から同じフィールドに変更するのことは無理なので、別々のフィールドのままできないでしょうか?
それからもう一つ、仮復旧日、仮復旧時間というフィールドがあります。仮設したりして取り敢えず機能だけ回復したという意味合いで、本復旧に至る前の段階です。同じように日付と時間が別のフィールドです。仮復旧か本復旧どちらか先に入力された方のデータと発生時間との時間の差を計算するのが目的です。仮復旧したのちに本復旧した場合に関しては先に入力された仮復旧時間で計算して終わりです。その後本復旧時間が入力されても計算しなおしません。文章だけでわかりにくいですね?すみません。

既存のシステムを私のような素人がいじる羽目になってしまい困っています。どうか助けてください。
宜しくお願いします。

タイトルRe^3: 24時間以上の表示
記事No172223
投稿日: 2018/04/06(Fri) 14:59
投稿者ナバ
1.
> ただ、2つ問題がありまして、テーブルの日付と時間のフィールドが別になっています。

日付と時刻が別フィールドならば+してしまえばいいのです。

停止時間: DateDiff("h",[発生日]+[発生時間],[復旧日]+[復旧時間])

2.
「先に入力された」かどうかは実際に入力した時刻がどうかではなく、
仮復旧日時が入力されていたら仮復旧日時を、そうでなければ復旧日時を計算に使う、という
ルールでいいですか?
それでいいのなら、IsNull関数で入力されているかどうかを判定し、Iif関数で条件分けをします。

停止時間: DateDiff("h",[発生日]+[発生時間],IIf(IsNull([仮復旧日]),[復旧日]+[復旧時間],[仮復旧日]+[仮復旧時間]))

タイトルRe^4: 24時間以上の表示
記事No172224
投稿日: 2018/04/06(Fri) 15:56
投稿者tam
> 1.
> > ただ、2つ問題がありまして、テーブルの日付と時間のフィールドが別になっています。
>
> 日付と時刻が別フィールドならば+してしまえばいいのです。
>
> 停止時間: DateDiff("h",[発生日]+[発生時間],[復旧日]+[復旧時間])
>
> 2.
> 「先に入力された」かどうかは実際に入力した時刻がどうかではなく、
> 仮復旧日時が入力されていたら仮復旧日時を、そうでなければ復旧日時を計算に使う、という
> ルールでいいですか?
> それでいいのなら、IsNull関数で入力されているかどうかを判定し、Iif関数で条件分けをします。
>
> 停止時間: DateDiff("h",[発生日]+[発生時間],IIf(IsNull([仮復旧日]),[復旧日]+[復旧時間],[仮復旧日]+[仮復旧時間]))


ありがとうございます。
やってみましたが、仮復旧時刻が入力されていなくて本復旧時刻が入力されている場合に、機能停止時間が空欄になってしまいます。仮復旧時刻がない場合もあるので、その場合は本復旧時刻で計算したいのですが可能でしょうか?

タイトルRe^5: 24時間以上の表示
記事No172226
投稿日: 2018/04/06(Fri) 16:24
投稿者ナバ
> 仮復旧時刻がない場合もあるので、その場合は本復旧時刻で計算したいのですが可能でしょうか?

本復旧時刻で計算するのは
a) 仮復旧日と仮復旧時刻の両方が入力されていない場合は、ですか。
それとも
b) 仮復旧日が入力されていてもいなくても、仮復旧時刻が入力されていない場合は、ですか。

やりたいのは、a,b どちらでしょう。

タイトルRe: 24時間以上の表示
記事No172222
投稿日: 2018/04/06(Fri) 14:50
投稿者shige
経過時間: DateDiff("h",Format([発生日] & " " & [発生時刻],"yyyy/m/d h:nn"),Format([復旧日] & " " & [復旧時刻],"yyyy/m/d h:nn"))

> OS:
> Access Version:2013
> 詳しい方教えてください。最近、テーブルの「日付/時刻」型では24時間以上の表示ができないことを知りましたが、時間を計算するうえでどうしても24時間以上の表示が必要です。
> 例えば、あるシステムの不具合発生時間と仮復旧、復旧時間がテーブルに入力されていて、発生から復旧までにかかった時間を計算する場合、復旧に2,3日かかることもあるためどうしても機能停止時間が24時間以上になることが多いです。
> クエリを使って単純に計算することはできるのですが24時間以上の計算がわかりません。復旧または仮復旧から発せ時間を差し引いて機能停止時間を算出し24時間以上(例えば200hとか)の表示にするにはテーブルやクエリをどうしたらよいか教えてください。
> 宜しくお願いします。

タイトルRe^2: 24時間以上の表示
記事No172225
投稿日: 2018/04/06(Fri) 16:07
投稿者tam
> 経過時間: DateDiff("h",Format([発生日] & " " & [発生時刻],"yyyy/m/d h:nn"),Format([復旧日] & " " & [復旧時刻],"yyyy/m/d h:nn"))

ありがとうございます。これですと仮復旧時刻があって本復旧時刻が入力されていない条件でエラーになってしまいます。
仮復旧時刻が入力されている場合は仮復旧時刻で、本復旧時刻がある場合は本復旧時刻で、仮と本が両方ある場合は先に入力されている方で計算したいのです。

すみません。無理難題ばかりで。
宜しくお願いします。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る