(現在 過去ログ86 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■12894 / inTopicNo.1)  イベントのエラー処理について
  
□投稿者/ 讃岐のご隠居 -(2021/03/29(Mon) 17:07:33)
    久しぶりにお尋ねします

    コマンドボタンを左クリックするだけで新規行のテキスト項目[a]にクリップボードをコピーできるようにイベント マウス左クリックを使用して
    下記のようなKEXをつくりました

    1: 手続き定義開始 コマンドボタン_18::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)

    2:クリップボード  取得,&STR
    3:行追加  終了状態 = &実行リターン,[a]  = &STR

    4:手続き定義終了

    1:と4:は自動生成した行です。

    [a]が重複禁止の索引項目なので重複したデータの場合

    KD1140:整列項目値が重複しています [ID6]

    いう表示が出て会話で行追加を中止することになります。

    それ以降はそのコマンドボタンが使用不能になります。
    再度使用可能にするには
    一旦保存終了して改めてフォームを開くことになります。

    この重複を確認することも作業上必要なので
    頻繁に起ります。


    KD1140:整列項目値が重複しています のエラーの後も
    コマンドボタンが使用可能になるよう処理を継続するには
    どうすればいいかお尋ねします。

    エラー処理というのがあったのですが
    それを次の行に書くだけでは解決しませんでした。
引用返信 [メール受信/OFF] 削除キー/
■12895 / inTopicNo.2)  Re[1]: イベントのエラー処理について
□投稿者/ まさやん -(2021/03/29(Mon) 19:36:57)
    2021/03/29(Mon) 20:06:15 編集(投稿者)

    > 2:クリップボード  取得,&STR
    > 3:行追加  終了状態 = &実行リターン,[a]  = &STR

    試してはいませんが、
    2: の後に
    検索 [a]_&STR

    条件 ( .not #終端行) メッセージボックス・・・
    条件 (#終端行)行追加 [a]=&STR


    の コマンドを入れてはどうでしょうか?

引用返信 [メール受信/OFF] 削除キー/
■12896 / inTopicNo.3)  Re[1]: イベントのエラー処理について
□投稿者/ ONnoji -(2021/03/29(Mon) 20:47:49)
    2021/03/30(Tue) 10:21:19 編集(投稿者)
    2021/03/30(Tue) 00:44:03 編集(投稿者)

    > KD1140:整列項目値が重複しています のエラーの後も
    > コマンドボタンが使用可能になるよう処理を継続するには
    > どうすればいいかお尋ねします。

    桐10?、それとも桐10s??、どちらでしょうか????
                    ・・・・・・・・
    質問する際には、桐のバージョンを提示してください。>ALL

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    まず、【桐 - ヘルプ】の[マウス左クリック]イベントの項を確認すると理由が明らかになりますが、

     [マウス左クリック]イベント 【桐-ヘルプより引用】

     一番下のところに書いてありますが・・・

     ■ノート
     このイベントハンドラを、[Shift] + [Break]キーで強制的に停止させた場合、
     またはイベント処理中にエラーが発生した場合は、イベントそのものが発生しなくなります。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
     停止したイベントを再び発生させる場合は、フォームを開き直してください。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ↑のように、「KD1140:整列項目値が重複しています [a]」というエラーが発生した場合、

    [マウス左クリック]イベントそのものが発生しなくなります。

    従って、フォームを開き直すのが一般的な方法ですよ。ちゃんちゃん。v(^_^)ok

      ※ちなみに、別のコマンドボタンから実行した一般手続きで、
      ※オブジェクト操作 @コマンドボタン_18{ マウス左クリック = 1 }を実行すればフォームを開き直す必要は無さそうですが(^^ゞ
      ※<追記>に書いた論点から、このアプローチは[ごまかし的な対症療法]なのでお勧めしません。

    となるわけですが、以下のように[マウス左クリック]イベントを使わなければこの問題は解決します。

    1.まず、コマンドボタン_18 の[マウス左クリック]イベントのチェックをオフにして、イベントが発生しないようにします。

    2.次に、コマンドボタン_18 を次のように設定します。

     ┌───────────────────────┐
     │オブジェクト名: コマンドボタン_18      │
     │標題     : 任意             │
     │                       │
     │ 機能名      機能パラメータリスト   │
     │1 なし                    │
     │2 手続き実行    "コマンドボタン_18Click" │
     │3 なし                    │
     │4 なし                    │
     └───────────────────────┘

    3.最後に一般手続き:コマンドボタン_18Click を以下のように作成します。

      ※手続き定義開始の行を書き換えるだけでOKです。

      手続き定義開始 コマンドボタン_18Click( )

      クリップボード  取得,&STR
      行追加  終了状態 = &実行リターン,[a]  = &STR

     手続き定義終了

    これで、エラーが発生しても、コマンドボタンが使用可能になりますよ。


    <参考>

    手前味噌ですが、以下の拙作webページも参考にしてみてください。

    フォームアプリケーション教書 第1部
    12.3 コマンドボタンを実行する
    http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-3

     コマンドボタンの原則

     × [マウス左クリック]イベントでイベントプロシージャを呼び出す
     ○ [コマンドボタン]の[機能名:手続き実行]で一般プロシージャを呼び出す


    <追記>

    > この重複を確認することも作業上必要なので頻繁に起ります。

    重複をチェックするのであれば、わざわざエラーになるような手順は不適当ですよ。

    具体的なやり方は、人それぞれに異なると思いますが、

    [検索]コマンドで、すでに登録済み=つまり重複になるか否かを確かめるのが普通のアプローチだと思います。

    つまり、エラーするかもしれない石橋をいきなり渡らずに、石橋を叩いて安全に渡るというのが常識的な手順ですよ。

    なお、常識的な手順といっても、やり方は一通りではなく、幾つもあります。

    従って、ご自身が分かり易い手順を考察してみてください。

    > エラー処理というのがあったのですが
    > それを次の行に書くだけでは解決しませんでした。

    [エラー処理]コマンドの使い方は要注意です。

    案外と気楽に[エラー処理]コマンドを使う人もいると思いますが、

    あらゆるエラーに対してこのコマンドを適用すると収拾が付かなくなります。

    なにしろ、ケアレスミスによって発生した文法エラーでさえにも反応するのですから。(^^ゞ

    以降は私の考えですが、

    ・[エラー処理]コマンドは、回避方法が存在しないエラーに対して適用する

    ということです。

    となると、大概のエラーは、[終了状態]パラメータや、関数で状態を調べるなどすれば回避できます。

    今回の質問のように、[KD1140:整列項目値が重複しています]のエラーは、簡単な手順で回避可能です。

    従って、[エラー処理]コマンドの対象は非常に限定的です。

    私の知る限りでは、

    ・フォームのオブジェクト名が半角なのか全角なのかを判定する

    場合に[エラー処理]コマンドが必須になります。

    しかし、それ以外には思い当たる対象がありません。

    詳しくは、こちら。
     ↓
    過去ログ60
    ■9286 / inTopicNo.1)  桐9から桐10へ変更した場合 □投稿者/ たゆー -(2015/08/27(Thu) 16:16:10)
    http://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=al2&namber=9286&rev=&no=0&KLOG=60


引用返信 [メール受信/OFF] 削除キー/
■12897 / inTopicNo.4)  Re[1]: イベントのエラー処理について
□投稿者/ 讃岐のご隠居 -(2021/03/30(Tue) 10:40:35)
    さっそくの回答有難うございました。
    うまく動きました

    失礼しました。桐10Sです

    まさやん様

    [a] が重複禁止の索引項目と書いたのは簡略化のためです。
    実際はクリップボード経由で[a]にいれたURLから#文字位置と#部分列で切出した[商品コード]が索引項目です。
    #計算を使って事前に重複チェックするのがめんどくさいのです。

    (今回は商品コードのリストアップが目的です。
    初出のみ記録して既出は記録しないという作業用です)


    ONnoji様のご教示通イベントを使わない方向で作り直してみました。

    エラー処理が機能しないのに頭をひねっていたのですが、疑問が氷解しました。
    イベント自体が発生しなくなるとは!

    質問ですが 機能名1を なしのまま開けておくのはどのような意味があるのですか?
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■12898 / inTopicNo.5)  Re[2]: イベントのエラー処理について
□投稿者/ ONnoji -(2021/03/30(Tue) 11:33:41)
    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


    手続き定義終了


    ※なお、この方法のバリエーションとしては、フォームの編集対象表を多重化して重複チェックを行う方法があります。
    ※その場合には、フォームのレコードが移動しないメリットがあります。

    上のサンプルコードは、アクションダイアグラム(罫線)で示していますので、コピペしても罫線が邪魔して動作しません。

    実際に試す場合には、罫線を削除してください。



引用返信 [メール受信/OFF] 削除キー/
■12901 / inTopicNo.6)  Re[3]: イベントのエラー処理について
□投稿者/ 讃岐のご隠居 -(2021/03/31(Wed) 19:37:40)
    > A.しかし、実際には、1 は "表示" にするのが一般的だと思いますよ。
    >この"表示の"意味がわかりません。機能グループで表示を選ぶと 機能名のズームイン
    等に置き換わってしまいます。
    >お手数ですが教えてください。

    下のやり方は大変参考になりました。
    有難うございました。

    ※なお、この方法のバリエーションとしては、フォームの編集対象表を多重化して重複チェックを行う方法があります。
    > ※その場合には、フォームのレコードが移動しないメリットがあります。
    >

    >
引用返信 [メール受信/OFF] 削除キー/
■12902 / inTopicNo.7)  Re[4]: イベントのエラー処理について
□投稿者/ ONnoji -(2021/03/31(Wed) 23:03:19)
    2021/03/31(Wed) 23:08:50 編集(投稿者)

    >> A.しかし、実際には、1 は "表示" にするのが一般的だと思いますよ。
    > この"表示の"意味がわかりません。機能グループで表示を選ぶと 機能名のズームイン等に置き換わってしまいます。
    > お手数ですが教えてください。

    機能グループで[編集]を選ぶと、機能名[表示]が選べますよ。添付の画像を参照して下さい。

    ■機能グループ[編集]

    [機能名]
     訂正
     表示/訂正
     表示 ←←←←←← これ!
     ジャンプ
     フォーカス移動
     検索_{条件名,比較式,値}
     次を検索,前を検索
     次を検索_比較式,前を検索_比較式
     項目置換
     置換_条件名
     元に戻す
     削除
     すべて選択

    機能名の一覧は拙作webページにまとめてありますので参考にしてください。

    こちら
     ↓
    フォームアプリケーション教書 第1部
    12.1 コマンドボタンの機能名は何種類ある?
    http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section12-1

    ※添付の画像は数日を目処に削除します。
     ↓
引用返信 [メール受信/OFF] 削除キー/
■12903 / inTopicNo.8)  Re[5]: イベントのエラー処理について
□投稿者/ 讃岐のご隠居 -(2021/04/01(Thu) 13:30:07)
    了解しました。お手数をおかけしました。
解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -