■記事リスト / ▼下のスレッド
/ ▲上のスレッド
■14350 / 親記事) |
期間絞込でのエラー時対応について
|
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 09:54:05)
| 2024/05/20(Mon) 17:48:46 編集(投稿者)
桐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
|
|
|
▽[全レス7件(ResNo.3-7 表示)]
■14353 / ResNo.3) |
Re[2]: 期間絞込でのエラー時対応について
|
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:39:37)
| まさやんさん
> 関数で #日数というのがあります。 > > #日数で 求められた結果が 0以下の時の > メッセージ が出るように したらどうかな? > > #日数(24/4/1,24/3/1) の結果は マイナスの結果になります
日数と言う関数知りませんでした。 教えて頂いた関数を使用しイメージ通りの結果を求める事が出来ました。
回答ありがとうございましたm(__)m
|
解決済み! |
|
■14354 / ResNo.4) |
Re[2]: 期間絞込でのエラー時対応について
|
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:48:12)
| AKさん
> ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。 > > 私がいつも職場で使用している例をお伝えします。 > > 入力した日付の情報を変数で比較させます。 > > 今回の場合、イベントコードを書かない方法です。 > > これはイベントコードを書くと改修作業が不要になるため、見通しもよくて非常にシンプルです。 > > コマンドボタンの機能名とパラメータリストを修正します。 > > 機能名 機能名パラメータリスト > > 1 実行条件 &mRefinementStartDate≦&mRefinementEndDate > > 2 表示 > > 3 手続き実行 cmd絞込開始Click > > これだけでそもそもコマンドボタンが実行できなります。 > 視覚的にすぐにユーザが自分の間違いに気づくはずです。 > またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。
こういうやり方もあるんですね! 分かりやすいし、効果テキメンでした(^^♪
この方式を取り入れようと思います!
> 最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。 > また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。
アドバイスありがとうございます! 意識して読みやすいプログラムを書くようにしているのですが、 まだまだですね(^^;
if else が入ってくると、途端に書き方や構文が難しくなります・・・ 解説ありがとうございました!
> 追伸 > > 私も十数年前にONnojiさんに指導を受けて今に至ります。 > 今回のジェダイの桐さんの質問を拝見すると当時の自分の似ていると思いながらコメントしました・・・(^^;
p.s.
まさか AKさん からコメントが着くとは思いもよりませんでした! 嬉しい限りです(^^)/
桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました!
ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが プログラムが上達してきました!
皆さんの対応が有難いですm(__)m
|
|
|
■14355 / ResNo.5) |
Re[3]: 期間絞込でのエラー時対応について
|
□投稿者/ AK -(2024/05/20(Mon) 19:36:28)
| 2024/05/20(Mon) 19:41:25 編集(投稿者) 2024/05/20(Mon) 19:41:13 編集(投稿者) 2024/05/20(Mon) 19:41:05 編集(投稿者)
> 桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました! > ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが > プログラムが上達してきました!
ジェダイの桐さん
余計なお世話ですが参考までに私の経験上良かったと思えるイベント勉強方法お伝えします。^^
1 少ないコードでもよいですが、毎日実際にコードを書いてたくさんエラーコードと学ぶとよい これは初心者、初級者のうちは非常に大事なことだと思います。 特に勉強と一緒で人が書いたコードを読んで理解している「つもり」は一番ダメです。 どんなに小さなコードでも実際に自分でコードを書いて、どういう結果や挙動になるか経験して失敗をいっぱい重ねることが上達への近道だと思います。
2 トレース出力ウィンドウを上手に使う。
桐にはトレース出力ウィンドウがありますのでこれを上手に使うことも上達の近道だと思います。 設定方法はヘルプを参照してください。 これを使用する理由はシンプルで、変数の値の変化を目視で確認できるからです。 最初のうちは変数値の変化が頭の中でよく理解できていないことが多いともいます。 そしてコードを書くことに慣れてくると、何れループ処理を勉強すると思いますがここが初級者には結構高いハードルになると思います。 その際、トレース出力ウィンドウを利用するとループ処理のインクリメントなど変数の値の変化を確認できるので非常に便利です。 また、上達していけばいくほどプログラムが肥大化していくのでシステムを改修する場合などトレース出力ウィンドウは必須になると思います。
私はイベントを勉強し始めて長らくこのループ処理が苦手で悩まされましたので是非活用してみてください。
以下は先ほどのイベントコードで変数を確認するためのサンプルです。
手続き定義開始 cmd絞込開始Click()
変数宣言 自動, 数値 { &ans } 変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg } 変数宣言 自動, 整数 { &TraceON = 1 } ← この変数を追加
&msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。" &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?" メッセージボックス &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans
条件(&TraceON) トレース出力_&ans
↑ この1行で何がわかるのか?というと、メッセージボックスで「はい」を押したときの戻り値【 1 】 が変数&ansに代入されたことがトレース出力ウィンドウで確認できます。 今度は試しに「いいえ」を押下するとどうなるか?是非実際にコードを書いて試してみて下さい。
そうすると、if( &ans = 1 )の制御文がわかるはずです。
3 最後に私の苦い経験を踏まえて・・・
私もイベントコードを書き始めの頃コードを書くことで色々できることが増えて楽しくてしかたがありませんでした。(^^; しかし、ここに罠が潜んでいます。 なんでもかんでもコードを書いてしまおうとする、ONnoijさんの言葉を借用させていただくと、「イベント過多症候群」です。 最初は楽しくて自分の力試しも含め色々書いていました。 最近私は10年ほど前に所属していた部署で作成した桐アプリを改修する作業をチョコチョコしています。 そこで目にした10年前の自分が書いた汚いコードと無駄コードの多さに我ながらうんざりしています。(^^; 要するに何が言いたいのかと申しますと、 イベントコードはどうしても自分がしたいことが実現できな時にだけ使用するということだと思います。 当たり前といえば当たり前ですが、私はこれが出来ていなくて現在10年前の自分にうんざりしています。(^^;
桐はそもそもそんなにイベントコードを書かなくてもたいていのことはコマンドボタンの機能で何とかなる場合が多いです。 今回の質問もそれで解決できましたので、なんとなく理解していただけるのではないでしょうか? なので、もちろん経験や慣れの問題もありますのでその見極めは難しいかもしれませんが、私のようにならないように気に留めておいていただくといいかなと思います。
今後のジェダイの桐さんの質問を私も楽しみにしております。
長文、駄文失礼しました。<(_ _)>
|
|
|
■14356 / ResNo.6) |
Re[2]: 期間絞込でのエラー時対応について
|
□投稿者/ まさやん -(2024/05/20(Mon) 19:39:54)
| > > 機能名 機能名パラメータリスト > > 1 実行条件 &mRefinementStartDate≦&mRefinementEndDate >
実行条件の使い方
私も 勉強になりました。 一括処理で組んでた 仕事用のプログラムを イベントに移行中です。
実に コマンドが 約半分くらいになるかもです。
if else end この使い方すれば 実に明解そのものですね ありがとうございました。
|
|
|
■14358 / ResNo.7) |
Re[1]: 期間絞込でのエラー時対応について
|
□投稿者/ ONnoji -(2024/05/20(Mon) 23:34:32)
| 2024/05/21(Tue) 07:58:02 編集(投稿者) 2024/05/20(Mon) 23:54:01 編集(投稿者)
当方は土日月とPCの前に居ませんでしたので詳細はよく理解していません。
すでに解決済みになってとのこと慶祝です。
なので余計なことは言わないように致しますが・・・
ちなみに、実に気になったことがあったので、老婆心ながら投稿させていただきます。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
このツリーを読んで居る時、
> if( .not #eof ) > if( &ans = 1 )
というコマンドの記述を発見しました。
これは私( ONnoji )の感想ではありますが、
なぜ "if" と 丸括弧"(" の間に半角または全角の空白が無いのだろうか?????
DOS桐もWin桐もコマンドの文法(シンタックス)は同じです。
しかし、なぜか?Win桐では[if]コマンドと条件式の間に半角または全角の空白を挿入しない例を多々見受けます。
これは、DOS桐/Win桐の言語仕様ではアウトです。
【転載】[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方 一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
しかし、実際にはエラーしないので、「まぁ、いいっか!」となっちゃう開発者が多いと思いますね。
******************************** 桐の if コマンドは、関数ではないので、エクセルの関数のような記述は誤りですゾ。動くか動かないかは別として・・・ ********************************
開発者は一度でも[桐 - ヘルプ]を読むべきですね。
Win桐という製品の仕様を説明しているヘルプを読まずに、単純にエラーが出ないという理由でスルーするという態度は当然良くないですよ。
交通規則を守りましょう!と同じですよ。
p.s.
転載【[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方】
空白文字は半角でも全角でもかまいません。
パラメータとパラメータのあいだは、半角または全角のコンマ(,)で区切ります。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
ひとつの一括処理コマンドは、コマンド名といくつかのパラメータで構成されています。
たとえばつぎの例では、最初の「表」がコマンド名、そのうしろの下線部分がパラメータです。
表 "Jusho.tbx",表番号=1,モード=共有更新
|
|
|
■記事リスト /
レス記事表示 →
[親記事-7]
|