過去の桐井戸端BBS (桐ver.8)
12712 一括処理で削除行の条件を選択したい 団十郎 2001/08/21-21:24
また行き詰まってしまいました。お世話になります。

フォーム形式にて表を表示し,削除ボタンを配置しております。

先頭行だったら 削除できないメッセージを出す
[番号]=#u だったら 削除できないメッセージ
 ([番号]は連番で,条件によって連番をとばすように設定してあります)
上記以外だったら 削除しますの確認後削除する

のような作業を一括処理で行いたいのです。

if構文で次のように書いてみましたがうまくいきませんでした。

名札 削除
  変数宣言 固有,長整数{&行番}
  行番号 &行番
  if(&行番<2)
    メッセージボックス "ちょっと待って","先頭行データは削除できません!" ,アイコン=!,ボタン指定=1
      手続き実行 伝票処理2
  else if (&行番>1 .and [番号]=#u)
    メッセージボックス "ちょっと待って","処理対象外データです。\n\n削除しますか?" ,アイコン=!,ボタン指定=5,制御文字展開=する,&確認
    if(&確認=7)
      手続き実行 伝票処理2
    else
    end
  else
    行削除 
    置換 終了状態 = &OK,[番号]
    ジャンプ 行番号 = 最終
  end
      手続き実行 伝票処理2


12713 イベントなら簡単だと思います 悲しげ 2001/08/21-22:24
記事番号12712へのコメント
どもっ、団十郎さん
どのようにうまく行かないのかを書かないとこれだけで直すのは難しいような気がします。
ざっと書き直してみましたが、
---------------
名札 削除
 if(#行番号=1)
  メッセージボックス "ちょっと待って","先頭行データは削除で・・・・
  手続き実行 伝票処理2    /*☆1*/
 else if([番号]=#u)
  メッセージボックス "ちょっと待って","処理対象外データです・・・・
  条件(&確認=7) 手続き実行 伝票処理2 /*☆2*/
 else
  行削除 
  置換 終了状態 = &OK,[番号]  /*★1*/
  ジャンプ 行番号 = 最終    /*★2*/
 end
 手続き実行 伝票処理2      /*★3*/
---------------
まず気になるところは★1です。
この置換の書式は、項目[番号]が計算項目であることを示唆しています。
どのような項目計算式を設定してあるのかを示すことが必要です。
もし、項目[番号]に常に何らかの値が入っているようなら、[番号]=#uは矛盾することになります。
また、このデータは並べ替えた状態にあるのか否か?
そして項目[番号]がもし並べ替えに影響しているようだったら★2で求める最終行とか、
あるいは先頭行云々も不定となる可能性があります。
あと、★3がこの位置にあると、☆1と☆2の場合は、この手続きを再度実行することになりますが、
それで構わないのかとか?



と、ここまで書いてみて、再度質問を見直してみたら

>フォーム形式にて表を表示し,削除ボタンを配置しております。

とありました。それなりに一括処理も書かれるようですから、
次のような感じにしてはどうでしょう。
当該フォームにイベントファイルを指定する。
  「削除」牡丹の機能を 手続き実行
  機能パラメタリストを 削除
その上で、イベントファイルの記述は次のようにします。
---------------
手続き定義開始 削除()
 if(#行番号=1)
  メッセージボックス "ちょっと待って","先頭行データは削除・・・
  手続き実行 伝票処理2()
 else if([番号]=#u)
  メッセージボックス "ちょっと待って","処理対象外データで・・・
  条件(&確認=7) 手続き実行 伝票処理2()
 else
  行削除 
  置換 終了状態 = &OK,[番号]
  ジャンプ 行番号 = 最終
 end
 手続き実行 伝票処理2()
手続き定義終了

手続き定義開始 伝票処理2()
 もにゃもにゃ
手続き定義終了
---------------

このような場合の、古典一括と牡丹の組合せは、そもそも可能なのだろうか?(^^;)

12714 Re:イベントなら簡単だと思います 団十郎 2001/08/21-22:54
記事番号12713へのコメント
悲しげさん いつもありがとうございます。

まずは古典一括処理でやってみることとして---------------

>名札 削除
> if(#行番号=1)
>  メッセージボックス "ちょっと待って","先頭行データは削除で・・・・
>  手続き実行 伝票処理2    /*☆1*/
> else if([番号]=#u)
>  メッセージボックス "ちょっと待って","処理対象外データです・・・・
>  条件(&確認=7) 手続き実行 伝票処理2 /*☆2*/
> else
>  行削除 
>  置換 終了状態 = &OK,[番号]  /*★1*/
>  ジャンプ 行番号 = 最終    /*★2*/
> end
> 手続き実行 伝票処理2      /*★3*/
>---------------
>まず気になるところは★1です。
>この置換の書式は、項目[番号]が計算項目であることを示唆しています。
>どのような項目計算式を設定してあるのかを示すことが必要です。
>もし、項目[番号]に常に何らかの値が入っているようなら、[番号]=#uは
>矛盾することになります。

最初の質問でもふれたつもりですが
別のある項目へ入力があった場合,連番を振らない計算式が設定してあります。

>また、このデータは並べ替えた状態にあるのか否か?
>そして項目[番号]がもし並べ替えに影響しているようだったら★2で求め
>る最終行とか、あるいは先頭行云々も不定となる可能性があります。

並べ替えはしておりません。
最終行を常に表示して,新規入力時には最終行へ行追加をさせるためです。

>あと、★3がこの位置にあると、☆1と☆2の場合は、この手続きを再度
>実行することになりますが、それで構わないのかとか?

いずれの場合も,各コマンド実行後,また元のフォームに戻るのでこう書きました。

で,再度やってみましたが・・・・・・・・
どの行を表示していても
最初の場合である
 メッセージボックス "ちょっと待って","先頭行データは削除で・・・・
が出てしまうのです。
この理由がわからないのですが・・・・

12715 Re:一括処理で削除行の条件を選択したい toshi-chan 2001/08/21-23:21
記事番号12712へのコメント
団十郎さん、こんばんは。
表記の一括処理を解読してみました。

(1)行番号が1のとき
   メッセージボックスを出す。ボタンは「OK」だけ。
   その後、伝票処理2という手続きに移行する。
(2)行番号が2以降で、かつ、項目[番号]が未定義
   メッセージボックスを出す。ボタンは「はい」と「いいえ」。
   「いいえ」が押されたら、伝票処理2という手続きに移行する。
(3)それ以外
   行削除を行う。
   項目[番号]を置換する。
   最終行にジャンプする。
******ここでif文から抜け出す*****
伝票処理2という手続きに移行する。


★私が思ったこと★
(ア) (2)で「はい」を押したときの処理がありませんね。
    この書式ですと、「はい」を押すとif文から抜け出して、伝票処理2に移行します。
    つまり「はい」「いいえ」のどちらを押しても結果は同じになってしまうのでは?
(イ) if文の外に「手続き実行 伝票処理2」が存在します。
   (1)(2)(3)のいずれの場合も 伝票処理2 は実行されることになります。
   しかも、(1)(2)のケースでは2回実行されることになります。
(ウ) 「フォーム形式にて表を表示し」とありますが、コマンドは何を使ったのでしょう。
   フォーム形式編集コマンドそれともウインドウ会話コマンドですか。


12716 Re:一括処理で削除行の条件を選択したい 団十郎 2001/08/21-23:42
記事番号12715へのコメント
toshi-chanさん こん**は resありがとうございます。

>★私が思ったこと★
>(ア) (2)で「はい」を押したときの処理がありませんね。
>    この書式ですと、「はい」を押すとif文から抜け出して、伝票処理2に移行します。
>    つまり「はい」「いいえ」のどちらを押しても結果は同じになってしまうのでは?
>(イ) if文の外に「手続き実行 伝票処理2」が存在します。
>   (1)(2)(3)のいずれの場合も 伝票処理2 は実行されることになります。

ご指摘,その通りですね。
 (1),(2)では元に戻り,
  (3)で削除実行に分岐

と言う構文にすれば良いのですよね。

>(ウ) 「フォーム形式にて表を表示し」とありますが、コマンドは何を使ったのでしょう。
>   フォーム形式編集コマンドそれともウインドウ会話コマンドですか。

 「ウインドウ会話コマンド」です。

よろしくご示唆ください。

12717 ひとつひとつ調べましょう toshi-chan 2001/08/22-09:32
記事番号12714へのコメント
団十郎さん、おはようございます。

>どの行を表示していても
>最初の場合である
> メッセージボックス "ちょっと待って","先頭行データは削除で・・・・
>が出てしまうのです。

これは、if文内の最初の条件式が成立していることを意味します。
つまり、一括処理の
   行番号 &行番
の部分の実行時、処理対象行は先頭行になっていて、&行番に1が代入されていますね。

これより前のコマンドを検証する必要があります。並べ替えや絞り込みコマンドのように処理対象行を先頭に
移動してしまうコマンドもありますからね。
デバッグ実行する、または、適当な箇所に表形式編集コマンドを挿入するなどして、ご自身で調べてください。
BBSの住人が原因を見つけるのは困難でしょう。

私もこの種の問題にしょっちゅう出会います。ほとんどの場合、
 「桐は正確に動いており、自分の頭が追いつかない。」
という結果です。がんばってね!!

(台風はこれから関東直撃みたい。これから台風を迎える方たちは気をつけてね)

12725 ありがとうございます 団十郎 2001/08/23-00:04
記事番号12717へのコメント
toshi-chanさん こん**は

> 「桐は正確に動いており、自分の頭が追いつかない。」
>という結果です。がんばってね!!

まったくそのとおり!だと思います。
これから,早速チェックに入ります。

>適当な箇所に表形式編集コマンドを挿入するなどして・・・・・・・・・・・

なるほど,こうすれば会話処理的に進められるわけですね!


>(台風はこれから関東直撃みたい。これから台風を迎える方たちは気をつけてね)
 (私のところは豪雨 しかし全くの無風 葉っぱ一枚そよがなかった!? 変な台風11)

戻る