過去の桐井戸端BBS (桐ver.8)
10120 ケースコマンドの中でのメッセージボックスコマンドで思うように分岐できない HERB 2001/03/08-17:51
以下イベントについて、外部DBに接続をします、
接続が正常終了しケースコマンドで続く処理を行うかどうかをメッセージボックスを表示させ、
SQLが何らかの処理中の時はキャンセルボタンを押してケース中止としたいのですが、
メッセージボックス、OK、キャンセルボタンどちらを押しても、続く処理を行ってしまいます。

記述が間違っているのか、ケースコマンド自体の記述が間違っているのか解りません、よろしくお願いします。

外部DB 接続,ODBC = "SQL_Server",\
     ユーザ名 = "",パスワード = "",\
     接続ハンドル = &hODBC,終了状態 = &OK

ケース開始
ケース (&OK=1)
メッセージボックス "データ取込",\
        "データを取り込みます、処理中はキャンセルして下さい。",\
        アイコン = ?,ボタン指定 = 2,\
        &YN
     条件 ( &YN = 2 ) ケース中止
ケース その他
確認 "システムとの接続ができません、担当者を呼んでください"
ケース終了

結合 "TB.xvw",,表番号 = 1,変数使用 = する 終了状態 = &OK
条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
絞り込み [更新日]<#日数加算(#日時値生成(&開始年,&開始月,&開始日),1)

中略

表 TB,表番号 = 6
条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
行削除 *
読み込み 表,条件名="TB.xvw"
表整理 余白割合 = 10
終了 表 1
終了 表 6

中略

5外部DB表を開き、表に読み込む作業を連続して行っています。

10123 Re:ケースコマンド、メッセージボックスについて toshi-chan 2001/03/08-18:26
記事番号10120へのコメント
HERBさん、こんにちは。
私は「外部DB」コマンド等は使用したことがありませんが、この一括処理では「ケース」コマンドの
使い方に問題があるように思います。

「ケース中止」コマンドはケース範囲から抜け出すコマンドなので、この事例では「結合」コマンドに制御が移ります。
「OKボタンを押したときに、結合コマンド以下の部分を実行したい」との考えでしょうから、コマンド群を

     条件 ( &YN = 2 ) ケース中止
  ここ→
     ケース その他

に書けば動くと思います。お試し下さい。
10128 Re:ケースコマンド、メッセージボックスについて 佐田 守弘 2001/03/08-23:38
記事番号10123へのコメント
HERBさん
ケースコマンドの件について補足しますと、(&OK=1)の場合に結合を実行し、その他のケースでは接続できない
メッセージの表示を行う様にします。
つまりHERBさんの書かれたコマンドを使って直せば、次のようになります。
===============================================
外部DB 接続,ODBC = "SQL_Server",\
     ユーザ名 = "",パスワード = "",\
     接続ハンドル = &hODBC,終了状態 = &OK
ケース開始
ケース (&OK=1)
メッセージボックス "データ取込",\
      "データを取り込みます、処理中はキャンセルして下さい。",\
      アイコン = ?,ボタン指定 = 2 ,&YN
 ケース開始
     ケース ( &YN = 2 )
   結合 "TB.xvw",,表番号 = 1,変数使用 = する 終了状態 = &OK
   条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
   絞り込み [更新日]<#日数加算(#日時値生成(&開始年,&開始月,&開始日),1)
    ケース終了
ケース その他
確認 "システムとの接続ができません、担当者を呼んでください"
ケース終了
===============================================
なお、メッセージボックスの結果での処理分岐にもケースコマンドを使う方が良いでしょう。
また、確認コマンドについても、メッセージボックスで確認させる方が良いと思います。

佐田守弘(KS-00119)
10137 Re:ケースコマンド、メッセージボックスについて HERB 2001/03/09-11:08
記事番号10128へのコメント
toshi-chanさん、佐田 守弘、HERBです。

早速の回答ありがとうございます、
toshi-chanさんのかかれていたとおりイベントを書き直し、うまく動きました。

投稿前に自分なりに試しました、toshi-chanさん言われるようにコマンド群を移し替え、検証したのですが
その時は記述が間違っていたのか、うまく動きませんでした、
なぜうまく動かなかったのかバックアップを取っていなかったので確認できないのが惜しいです、
記述ミスでも元のファイルが残っていればどこで、何を間違っていたのかあとからでも検証できますね、
今後は間違っていてもあとから検証できるようファイル名に番号でも振って、検証できるようバックアップを取るようにします。

>===============================================
>外部DB 接続,ODBC = "SQL_Server",\
>      ユーザ名 = "",パスワード = "",\
>      接続ハンドル = &hODBC,終了状態 = &OK
>ケース開始
> ケース (&OK=1)
> メッセージボックス "データ取込",\
>      "データを取り込みます、処理中はキャンセルして下さい。",\
>      アイコン = ?,ボタン指定 = 2 ,&YN
>  ケース開始
>     ケース ( &YN = 2 )
>    結合 "TB.xvw",,表番号 = 1,変数使用 = する 終了状態 = &OK
>    条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
>    絞り込み [更新日]<#日数加算(#日時値生成(&開始年,&開始月,&開始日),1)
>    ケース終了
> ケース その他
> 確認 "システムとの接続ができません、担当者を呼んでください"
>ケース終了
>===============================================
>なお、メッセージボックスの結果での処理分岐にもケースコマンドを使う方が良いでしょう。
>また、確認コマンドについても、メッセージボックスで確認させる方が良いと思います。

佐田さんのかかれたイベントも、toshi-chanさんのイベントとどう動きが違うのかこれから試してみます、
正直なところ、お二人のイベントを見てもどう違うのかわからない部分が多く、
実際動かしてみて検証するしかないと思っています、
ケース開始コマンドも十分理解した上で使っているわけではなく、
ある条件が満たされたら次の処理に移る程度と理解しております、
条件付けの記述も不確かな上、変数の取扱もたぶんこうだろう程度でイベントを作成しています。

5、外部DB表を読み込むため、何らかの理由でそのうちどれかの外部DB表が正常に読み込めない時に、
イベントエラーで終了しないよう、ケース開始コマンドを使って中止できるよう考えています、
今回のコメントでヒントがつかめてきたように思えます、
メッセージボックス、確認コマンドですが分岐処理に使うのなら、メッセージボックスがよいと言っておられます、
私なりの解釈です、確認よりもメッセージボックスの方が応用が利くと言うことでしょうか、
条件付けが細かく指定できるからですか、いろいろ試行錯誤してみます、
また、息詰まりましたらコメントさせていただきます。

よろしくお願いします。

10166 Re:ケースコマンド、メッセージボックスについて toshi-chan 2001/03/09-20:30
記事番号10137へのコメント
HERBさん、こんばんは。

前回のコメントには書きませんでしたが、私も佐田さんと同意見です。

1.ケースコマンド
 ケースコマンドを使用して場合分けをしているのですから、ケース範囲内での更なる場合分けもケースを使用した方が
スマートなプログラムになると思います。
見ていてわかりやすいし、リズム感があるし、詩で言うところの「韻を踏む」ような感じです。
人が見てわかりやすいプログラムは、桐が実行してもエラーになりにくいとのことです。
また、ケース範囲内では複数のコマンドを使用できます。
条件コマンドでは1つしか書けませんよね。

2.確認コマンド
 これは桐ver5互換コマンドです。
桐ver5の一括処理をWin桐でも動作させるために残っているコマンドで、将来は廃止になる可能性があるそうです。
これと同等以上の機能をもつメッセージボックスコマンドが新規搭載されたわけですから、新規のシステム設計時には
これを使用した方がいいでしょう。

********************************************************

私のアドバイス(HERBさんのプログラム)と佐田さんの違いについてです。

佐田さんはケースコマンドを入れ子構造にしてあります。内側のケース範囲では複数の場合分けがなされていません。
  ケース ( &YN = 2 )  という場合の処理があるだけですね。これがケースコマンドの特徴の一つです。
「場合分けは一つでもいい」のです。もし、この条件式が成立しない場合(OKボタンを押さなかったとき、
つまりキャンセルを押したとき)は、何の処理もせずケース範囲から抜け出すだけです。
「まず最初に場合分けを宣言する。OKボタンを押したときには結合コマンド以下を実行し、それ以外の場合は何もしない。」
という意味合いになります。

HERBさんは条件コマンドを使用していますから、
「結合コマンド以下の部分を実行することが大前提であり、ただしキャンセルボタンが押されたときはケース中止とする」
という意味の記述になると思います。

つたない説明で済みません。

10175 Re:ケースコマンド、メッセージボックスについて HERB 2001/03/10-10:32
記事番号10166へのコメント
toshi-chanさん、HERBです。

> 前回のコメントには書きませんでしたが、私も佐田さんと同意見です。

> 佐田さんはケースコマンドを入れ子構造にしてあります。内側のケ
> ース範囲では複数の場合分けがなされていません。
>   ケース ( &YN = 2 )  という場合の処理があるだけですね。
> これがケースコマンドの特徴の一つです。
> 「場合分けは一つでもいい」のです。もし、この条件式が成立しな
> い場合(OKボタンを押さなかったとき、つまりキャンセルを押した
> とき)は、何の処理もせずケース範囲から抜け出すだけです。
> 「まず最初に場合分けを宣言する。OKボタンを押したときには結合
> コマンド以下を実行し、それ以外の場合は何もしない。」という意
> 味合いになります。
>
> HERBさんは条件コマンドを使用していますから、「結合コマンド以
> 下の部分を実行することが大前提であり、ただしキャンセルボタン
> が押されたときはケース中止とする」という意味の記述になると思
> います。
>
> つたない説明で済みません。

ケースコマンド、条件コマンドの違いが少し理解できました、
違いが解らずイベントを作成していたので、今後はアドバイスの通り変更してみます。

確認コマンドとメッセージボックスの違いも説明していただきありがとうございます、
確認コマンドが将来使えなくなるとのこと、他にも確認コマンドを使っていますが、
メッセージボックスに変更します。

また、息詰まった時は質問させていただきます、今後ともよろしくお願いします。

戻る