みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
データをある期間だけ検索する為、指定した日付、時間に対して
一日前の日付、時間を計算しようとしましたが上手くいきません。
教えてください。
検索で A::検査日時 を指定したとします。
この日付けが $date = 2014/02/07 5:00:00 です。
そのとき $date1 = 2014/02/06 5:00:00 として
<= $date1 >=$date の期間で検索したいのです。
よろしくお願いします。
Offline
範囲検索は...を使います。
$date1 & "..." & $date
barikanさん
ありがとうございます。
$date1の計算方法も教えていただけないでしょうか?
Offline
前日の計算法ですよね、
タイムスタンプは秒数の数字が値となっていますから、1日の秒数を引けばいいでしょう。
タイムスタンプ - 24*60*60
Offline
チポさん
ありがとうございます。
やってみました。
$date は 2014/02/07 5:00:00 なのですが
$date1 = $date - 24*60*60 とすると
答えは?が出てきます。
どこが間違っているのでしょうか?教えてください。
よろしくお願いします。
Offline
$dateがテキストなのでは。
設定する時GetAsTimestampを使う。
timさん
ありがとうございます。
$date = 記録::検査日時の「記録::検査日時」のフィールドはタイムスタンプになっています。
今回教えていただいたように GetAsTimestamp($date) とすると 答えは?になってしまいます。
GetAstext($date)とすると 2014/02/07 5:00:00 と出てきます。
$dateがタイムスタンプであれば $date - 24*60*60 という計算は可能なんでしょうか?
上手くいきません。なにが問題なのか教えてください。よろしくおねがいします。
ちなみに
$date - 1 だと ?
-24*60*60 だけだと -86400 が出てきます。
Offline
変数のタイプはテキストなんですよね。
ですから、
$date1 = $date - 24*60*60
としないで、
$date1 = A::検査日時 - 24*60*60
とすれば、
$date1 & "..." & $date
このままでいいのでは。
Offline
チポさん
ありがとうございます。
$date1 = A::検査日時 - 24*60*60にしましたが
$date1 は ? になってしまいました。
$date1 = GetAsTimestamp ( "2014/02/07 5:00:00" )
にしましたが
なぜか 2014/02/07 5:00 と表示されました。
$date1の設定がおかしいのかもしれません。
Offline
>なぜか 2014/02/07 5:00 と表示され
日時をテキスト変換する場合の書式はOS環境やファイルを作った時の環境によるので、それであってます。
検索値の指定は、最初に「この日付が」と言ってるから現在のレコードのフィールド値でいいのかなあ?
A::検査日時が正しいタイムスタンプ値になってない?
timさん
ありがとうございます。
検索値に入力する際、気になっていたのですが、
「2014/02/07 5:00:00.*」となっている(なってしまう)のですが
最後の「.*」は問題ありませんか?
よろしくお願いします。
Offline
ありません。上の方だけ(日付だけとか)入れると、下は任意という記号*が自動補完されます。
その入力で検索されますか?
検索条件に「?」を入れて検索すると何か該当しませんか。
timさん
検索されません。
検索条件が該当しないという警告が出てきます。
Offline
疑問にお答えが有りませんよ。
A::検査日時
がタイムスタンプフィールドになっていて、正しい値が入力されている?
変数を設定で
$date = A::検査日時
$date1 = A::検査日時 - 24*60*60
としている?
それで、
フィールド設定で
$date1 & "..." & $date
としている?
この時点で、検索フィールドの値を見てください。
Offline
データには問題ないみたいなので、
変数を設定[$date;A::検査日時]
検索モードに切り替え[]
フィールド設定[A::検査日時;($date-86400)&".."&$date]
検索実行[]
でいいと思うんだけど
$date1 = A::検査日時 - 24*60*60にしましたが
$date1 は ? になってしまいました。
は、どこで見てるんでしょうか。データビューア?
tim さん
ありがとうございます。
やってみました。
しかし まず,
ダイアログボックスに「この検索条件に一致するレコードがありません」と出てきます。
そこで検索条件変更のボタンを押すと
「?...2014/01/30 5:00:00.*」が出てきます。
$dateの部分は入力した通り 「2014/01/30 5:00:00.*」と出ており、
問題ないと思います。
ちなみにデータビューアというものを知りませんので、$date1をダイアログボックスに表示して
確認しております。
よろしくお願いします。
Offline
データビューアはAdvanced版の機能です。
特定のバージョンのバグかな?
フィールド設定[A::検査日時;(GetAsTimestamp($date)-86400)&".."&$date]
で対処できるかなあ?
Offline
Wanderさん
ありがとうございます。
変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($dt - 86400) & "..." & $dt]
とすれば
出来ました。
しかしながら 現時点の日時はOKですが
日時を指定して検索する方法がわかりません。
よろしくお願いします。
Offline
timさんのでやってるように、Get( タイムスタンプ )の代りにフィールドを指定すればいいです。
検索モードにする前に代入。
>$dateの部分は入力した通り 「2014/01/30 5:00:00.*」と出ており、
変数は$dateの1個しか使いませんけど、2個使ってやりませんでした?
代入してない変数を使うと計算結果がマイナスになって、不正タイムスタンプ=?で表記されます。
「現在のレコードのフィールド値で検索」でいいんですか。
「指定する」なら、普通はダイアログを出すとか検索モードで一時停止してユーザに入力させると思いますけど。
Offline
Wondarさん
すみません。
変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($date - 86400) & "..." & $date]
です。間違ってました。
Offline
Wanderさん
下記のように変更しました。
おっしゃるように検索モードで一時停止してユーザーに入力してもらうように下記のようにしました。
フィールドへ移動 「A::検査日時」
検索モードに切り替え[一時停止]
変数を設定 [$date; 値:A::検査日時 ]
フィールド設定 [A::検査日時; 値:($date - 86400) & "..." & $date]
検索実行[]
にしましたが
ダイアログボックスに「この検索条件に一致するレコードがありません」と出てきます。
そこで検索条件変更のボタンを押すと
「?...2014/01/30 5:00:00.*」が出てきます。
そこで
$dateがタイムスタンプデータになっていないのではと思い
変数を設定 [$date; GetAsTimestamp (値:A::検査日時) ]
にしたところ
「?...?」になりました。
よろしくお願いします。
Offline
Wanderさん
変数を設定 [$date; 値:Get( タイムスタンプ )]
変数を設定 [$date1; 値:($date - 86400) & "..." & $date]
上記ですと 上手くいきますが
フィールド設定 [A::検査日時; 値:Get( タイムスタンプ )]
変数を設定 [$date; 値:A::検査日時 ]
フィールド設定 [A::検査日時; 値:($date - 86400) & "..." & $date]
検索実行[]
とすると ?が出てしまいます。
検索を一時停止してフィールドに値を入力しないでタイムスタンプデータを
入力する方法はないでしょうか?
Offline
Wanderさん
ダイアログボックスから入力して入力する方法にしましたがやはり ? が出ます。
カスタムダイアログを表示["検査日時入力";"検査日時を入力してください。";A::検査日時]
フィールド設定 [A::検査日時; 値:(A::検査日時 - 86400) & "..." & A::検査日時]
やはり「?...2014/01/30 5:00:00.*」が出てきます。
よろしくお願いします。
Offline
まず、既存のフィールド値で検索するんでなければ、タイムスタンプを入力しないといけません。
しかし、検索モードで(一時停止でもダイアログでも)入力すると、省略部分は補完されますけど、それはあくまで「検索条件」なんで、正しいタイムスタンプではありません。(日時計算に使えない)
秒まで入れても小数が補完されるというのは、迷惑な仕様ですね...いつからこうなのかな。
とりあえず、入力用のグローバルフィールドを使うのが手っ取り早いのでは。
ブラウズモードに切り替え[]
カスタムダイアログ[グローバルへ入力]
検索モードに切り替え[]
フィールド設定[A::検査日時; 値:(A::グローバル - 86400) & "..." & A::グローバル]
検索実行[]
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 567.22 KiB (Peak: 587.76 KiB) ]