■記事リスト / ▼下のスレッド
■14350 / 親記事) |
期間絞込でのエラー時対応について
|
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 09:54:05)
| 桐10s Windows10を使用しています。
日付絞り込み.TBXの項目名 日付 には ランダムに24/4/1〜24/4/30まで入力されいます。
日付絞り込み.WFX から コマンドボタンで 期間指定絞込.WFXをモーダルフォームで開き、 絞り込み開始日 と 絞り込み終了日 を入力して 日付絞り込み.WFXの日付を絞り込みたいと考えています。
名札 メイン 変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }
表 "日付絞り込み.TBX" &mRefinementStartDate = [日付] &mRefinementEndDate = [日付] *
手続き定義開始 cmd絞込開始Click() 変数宣言 自動, 数値 { &ans } 変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
表 "日付絞り込み.TBX" 解除 * if( .not #eof ) &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。" &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans
if( &ans = 1 ) 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate } &msg = "絞り込み完了しました" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行() else &msg = "キャンセルしました" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない end
else &msg = "該当日が見当たりません" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない end
手続き定義終了
この手続きですと、絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動きになります。
しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。 (絞り込みの結果は、絞り込んだ状態で全て未定義状態です)
良く考えてみると
else &msg = "該当日が見当たりません" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない end
このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・
絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m
|
|
1716166445.zip/15KB
|
|
▽[全レス2件(ResNo.1-2 表示)]
■14351 / ResNo.1) |
Re[1]: 期間絞込でのエラー時対応について
|
□投稿者/ まさやん -(2024/05/20(Mon) 11:46:00)
| 2024/05/20(Mon) 12:06:56 編集(投稿者) 2024/05/20(Mon) 11:47:45 編集(投稿者) 2024/05/20(Mon) 11:47:12 編集(投稿者)
> > しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。 > (絞り込みの結果は、絞り込んだ状態で全て未定義状態です) >
> 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m
上記の場合
関数で #日数というのがあります。
詳しくは ヘルプを
絞り込み始まる前に
#日数で 求められた結果が 0以下の時の メッセージ が出るように したらどうかな?
#日数(24/4/1,24/3/1) の結果は マイナスの結果になります
|
|
|
■14352 / ResNo.2) |
Re[1]: 期間絞込でのエラー時対応について
|
□投稿者/ AK -(2024/05/20(Mon) 15:33:19)
| 2024/05/20(Mon) 15:54:23 編集(投稿者) 2024/05/20(Mon) 15:53:57 編集(投稿者) 2024/05/20(Mon) 15:42:23 編集(投稿者) 2024/05/20(Mon) 15:42:18 編集(投稿者) 2024/05/20(Mon) 15:35:25 編集(投稿者) 2024/05/20(Mon) 15:35:14 編集(投稿者) 2024/05/20(Mon) 15:35:13 編集(投稿者)
> 良く考えてみると > > else > &msg = "該当日が見当たりません" > メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない > end > このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・ > 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m
これは、「絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動き」をしますが、
「該当するレコードが無い場合」メッセージを表示させるためのものです。
例えばフォームで 絞り込み開始日 → 令和6年4月 1日 絞り込み終了日 → 令和6年4月19日
と入力して実行したとしても、該当する日(レコードが)がそもそもtbx側にない場合に表示するするというものです。
試しに、tbx側のレコードの4/20〜4/30をわざと削除して、上記の日で絞り込みを実行するとわかるはずです。
> このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・
そのためこの考えは誤りになります。 また、そもそも意味をなさないコードはそもそも書く必要がありませんので当然書きません。 これは後にコードを修正する場面で余計な作業や誤解を招くのを避けるためです。
今回のジェダイの桐さんの意図する質問を少し読み替えると、
ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。
私がいつも職場で使用している例をお伝えします。
入力した日付の情報を変数で比較させます。
今回の場合、イベントコードを書かない方法です。
これはイベントコードを書くと改修作業が不要になるため、見通しもよくて非常にシンプルです。
コマンドボタンの機能名とパラメータリストを修正します。
機能名 機能名パラメータリスト
1 実行条件 &mRefinementStartDate≦&mRefinementEndDate
2 表示
3 手続き実行 cmd絞込開始Click
これだけでそもそもコマンドボタンが実行できなります。 視覚的にすぐにユーザが自分の間違いに気づくはずです。 またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。
最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。 また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。
手続き定義開始 cmd絞込開始Click()
変数宣言 自動, 数値 { &ans } 変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
&msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。" &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans
if( &ans = 1 ) 表 "日付絞り込み.TBX" 解除 * if( .not #eof ) 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate } &msg = "絞り込み完了しました" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行() else &msg = "該当日が見当たりません" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない end 編集表 "日付絞り込み.TBX" 終了 表 編集対象表 else
&msg = "キャンセルしました" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
end
手続き定義終了
追伸
私も十数年前にONnojiさんに指導を受けて今に至ります。 今回のジェダイの桐さんの質問を拝見すると当時の自分の似ていると思いながらコメントしました・・・(^^;
|
|
|
■記事リスト /
レス記事表示 →
[親記事-2]
|