| 2021/03/31(Wed) 10:57:50 編集(投稿者) 2021/03/30(Tue) 14:19:29 編集(投稿者)
> 質問ですが 機能名1を なしのまま開けておくのはどのような意味があるのですか?
┌───────────────────────┐ │オブジェクト名: コマンドボタン_18 │ │標題 : 任意 │ │ │ │ 機能名 機能パラメータリスト │ │1 なし │ │2 手続き実行 "コマンドボタン_18Click" │ │3 なし │ │4 なし │ └───────────────────────┘
1 は "なし" でも問題ありません。
A.しかし、実際には、1 は "表示" にするのが一般的だと思いますよ。
B.手続き実行で呼び出した一般手続き:コマンドボタン_18Click 側で[更新モード設定]メソッドで表示にしてもOKです。
AとBのどちらがお好みか分からなかったので、"なし" にした次第です。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
> この重複を確認することも作業上必要なので頻繁に起ります。 > > 重複をチェックするのであれば、わざわざエラーになるような手順は不適当ですよ。 > > 具体的なやり方は、人それぞれに異なると思いますが、 > > [検索]コマンドで、すでに登録済み=つまり重複になるか否かを確かめるのが普通のアプローチだと思います。 > > つまり、エラーするかもしれない石橋をいきなり渡らずに、石橋を叩いて安全に渡るというのが常識的な手順ですよ。 > > なお、常識的な手順といっても、やり方は一通りではなく、幾つもあります。
レコードの重複チェックの考え方を以下に示しますので参考にしてみてください。
プログラム無しの、対話操作では重複禁止のエラーメッセージが出ればOKですが、
しかし、プログラム=フォーム(.wfx)+イベント処理(.kex)の場合には、エラーによって処理が中断してしまいます。
そこで、エラーを起こさないように工夫する必要があります。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
<考え方>
・レコードの値が重複しているか否かを調べる → [検索]コマンドを用いる
手続き定義開始 コマンドボタン_18Click( ) 変数宣言 自動,文字列{ &icon, &title = "コマンドボタン_18Click( )", &msg } 変数宣言 自動,文字列{ &string } 変数宣言 自動,文字列{ &expression } /* 表現 */ 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } /* 二重引用符 */ 変数宣言 自動,整数 { &found }
クリップボード 取得, &STR ┌if ( &STR <> #u ) │ │ **NG!:行追加 終了状態 = &実行リターン, [a] = &STR │ │ &string = &STR │ &string = #文字置換( &string, &WQ, &WQ + &WQ ) │ &string = #文字置換( &string, #全角( &WQ ), #全角( &WQ + &WQ ) ) │ &expression = &WQ + &string + &WQ │ 検索 [a]_&expression, 終了状態 = &found /* &found 1:探索成功 -1:探索不成功 */ │ │┌if ( &found = -1 ) /* &found 1:探索成功 -1:探索不成功 */ ││ ││ &msg = "値は重複していません" ││ メッセージボックス &title, &msg, アイコン = i ││ ││ 行追加 終了状態 = &実行リターン, [a] = &STR ││ │├else ││ ││ &msg = "値が登録済みです" ││ &msg = &msg + "\n\n&STR = " + &STR ││ メッセージボックス &title, &msg, アイコン = e, 制御文字展開 = する ││ │└end │ ├else │ │ &msg = "&STRの値が未定義値です" │ メッセージボックス &title, &msg, アイコン = e └end
手続き定義終了
※なお、この方法のバリエーションとしては、フォームの編集対象表を多重化して重複チェックを行う方法があります。 ※その場合には、フォームのレコードが移動しないメリットがあります。
上のサンプルコードは、アクションダイアグラム(罫線)で示していますので、コピペしても罫線が邪魔して動作しません。
実際に試す場合には、罫線を削除してください。
|