過去の桐井戸端BBS (桐ver.8)
13669 一括処理で「無効なウィンドウハンドルです」というエラーが出る 宮田 徹 2001/10/22-18:58
一括処理初心者です。教えてください。
すでにここだけで4日費やしています。
概略は絞り込みをしたいのですが
まずは別表の"商品.tbl"を出して希望の行をコマンド処理行指定で変数に変えて
絞り込みをする表"在庫.tbl"へ代入絞り込みます。
行集計を実行して表形式編集で表示します。
以下の書き方で全てうまく動いてくれるのですが
表を閉じる際に右上の×ボタンをクリックすると
エラー(無効なウインドウハンドルです。行 119)が出ます。
これがどうしてもわかりません、
よろしくお願い申し上げます。

  名札 在庫3
     使用フォーム "検索.wfm"
     ウインドウ作成 フォーム, 位置=(100,100),ハンドル=&表
     繰り返し
119    ウインドウ会話 &表,ボタン=&ボタン
     ケース開始
     ケース(&ボタン="在庫数")
     表"商品,tbl"
処理行指定 &商品,表 画面消去=する
     代入 &商品=[商品番号]

     表"在庫,tbl"
     絞り込み [商品番号]=&商品
     行集計 条件名="在庫集計",データ行=有効
     ウインドウ作成 表, ハンドル=&表
     ウインドウ位置 最大化,&表
     表形式編集
     ケース終了
     行集計解除
     絞り込み解除
     表
     繰り返し終了
     ウインドウ終了 &表
     手続き終了

13672 Re:一括処理のエラー(ウインドウハンドル) toshi-chan 2001/10/22-23:10
記事番号13669へのコメント
宮田さん、こんばんは。
見やすく書き直すと下記のようになります。

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

115 名札 在庫3
116   使用フォーム "検索.wfm"
117   ウインドウ作成 フォーム, 位置=(100,100),ハンドル=&表
118   繰り返し
119      ウインドウ会話 &表,ボタン=&ボタン
        ケース開始
          ケース(&ボタン="在庫数")
            表"商品,tbl"
            処理行指定 &商品,表 画面消去=する
            代入 &商品=[商品番号]
             表
126            表"在庫,tbl"
            絞り込み [商品番号]=&商品
            行集計 条件名="在庫集計",データ行=有効
129            ウインドウ作成 表, ハンドル=&表
130           ウインドウ位置 最大化,&表
            表形式編集
        ケース終了
        行集計解除
        絞り込み解除
        表
136    繰り返し終了
    ウインドウ終了 &表
     手続き終了

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

とりあえずの問題は、ウインドウハンドルを代入するための変数「&表」の使い方にあるのではないですか。

117と119行目ではフォームのウインドウハンドルが &表 に代入されていますね。
その後126行目で「在庫.tbl」を開き、このウインドウを129と130行目で作成しています。
ここでも同じ変数 &表 を使っていますね。
それで「在庫.tbl」のウインドウハンドルが代入されてしまっているのだと思います。

この状態で136行目の「繰り返し終了コマンド」に達し、118行目の「繰り返しコマンド」に戻り、
119行目の制御に入ります。
この時、桐はフォームの会話処理に入ろうとしているのに、&表 には「在庫.tbl」のウインドウハンドルが入っているままなので
エラーになっているのだろうと思います。

対策としては、ウインドウハンドルを取得するための変数を2つ用意して使い分けることですね。

余談ですが、この一括処理だと繰り返しループから抜けるための処理がないような気がしますが・・・・・
ウインドウの問題を解決しても、ここで再び壁に突き当たる可能性があるような無いような・・・・・・
処理手順を再度見直してみることをおすすめします。

13679 Re:一括処理のエラー(ウインドウハンドル) 宮田 徹 2001/10/23-13:44
記事番号13672へのコメント

toshi chan様ご指導ありがとうございます。
早速やってみるのですがうまくいきません。
最初のハンドル&表で117行と119行を使用しもう一つのハンドル&表2で129行と130行を使い分けました。
また表形式編集行の後に&表2のウインドウを終了してみたのですが書式もよくわかりません。
初心者すぎてすみません。
また全てを元に戻して129行と130行を削除してみたのですが結果はいっしょでした。
やはり代入することによるハンドル操作が出来てないのでしょうか。
今のところエラーまでは満足なデータ表示はするのですがまだ先難題がありそうです。
ループを抜ける事は条件コマンドにより処理を中止しすることなのでしょうか?
もう少し頑張ってみようと思いますのでよろしくお願い申し上げます。
**********************************************************************

115 名札 在庫3
116   使用フォーム "検索.wfm"
117   ウインドウ作成 フォーム, 位置=(100,100),ハンドル=&表
118   繰り返し
119      ウインドウ会話 &表,ボタン=&ボタン
        ケース開始
          ケース(&ボタン="在庫数")
            表"商品,tbl"
            処理行指定 &商品,表 画面消去=する
            代入 &商品=[商品番号]
             表
126            表"在庫,tbl"
            絞り込み [商品番号]=&商品
            行集計 条件名="在庫集計",データ行=有効
129            ウインドウ作成 表, ハンドル=&表2
130           ウインドウ位置 最大化,&表2
            表形式編集
            ウインドウ終了 &表2 
             ケース終了
        行集計解除
        絞り込み解除
        表
136    繰り返し終了
    ウインドウ終了 &表
     手続き終了

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

13682 Re:デバッグの基本 Ogo 2001/10/23-17:09
記事番号13679へのコメント

ちょっと解析する気にはならないけど……

このような場合のデバッグの常套手段は、1行前に変数を表示させて、その値を確認することから始まります。

即ち、エラーが出る1行前に

確認 #文字列(&表)

と入れて、表示された中身を確認してから、対策を考えて下さい。

13683 Re:デバッグの基本 宮田 徹 2001/10/23-20:20
記事番号13682へのコメント
Ogo様 ご指導ありがとうございます。早速やってみます。
    
13686 Re:一括処理のエラー(ウインドウハンドル) toshi-chan 2001/10/23-23:44
記事番号13679へのコメント
宮田さん、こんばんは。Ogoさん、フォローをありがとうございます。

●さて、宮田さん。ご自分が作ったシステムの具体的動作について質問する場合、
「何をやりたいのか」を正確に記述(説明)することから始める必要があります。その上で、一括処理を提示し、どこがどううまくいかないのかを示すことですね。

昨日の段階では「何をやりたいのか」がよくわからなかったために、とりあえず気がついたことだけをコメントしました。
一日たって、何となく「やりたいこと」がわかってきたので追加でコメントします。

●「やりたいこと」を簡単に言うと
    「特定の商品の在庫状況を画面表示したい」
ということなのだと思います。手順は

(1) 商品.tbl を開いて、目的の商品を一つ選ぶ。
(2) 変数 &商品 に選んだ商品の商品番号を代入する。
(3) 在庫.tblを開く。
(4) 目的の商品のレコードを &商品 を使用して絞り込む。
(5) 絞り込まれたレコードに対して行集計を実行する。
(6) (5)の結果を画面に表示する。

でしょうか。

●検索.wfm にはコマンドボタンが配置されていて、そのオブジェクト名は「在庫数」だと思われます。
コマンドボタンをもうひとつ追加してください。そのオブジェクト名は「終了」にしましょう。一括処理は下記のようにコマンドの順序を入れ替えてみました。
これで動作検証をしてみてはいかがですか。
同時に一括処理のリファレンスを参照して、コマンドの意味を確かめてみてください。

うまくいかない場合は「何がまずいのか」を再度じっくり考える必要があります。

●疑問・・・検索.wfm  にはどんなオブジェクトが配置されているのかな。もしかしてコマンドボタンが1個だけですか。
フォームの編集対象表はあるのかな?

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

115名札 在庫3
116   繰り返し
117      使用フォーム "検索.wfm"
118      ウインドウ作成 フォーム, 位置=(100,100),ハンドル=&表
119      ウインドウ会話 &表,ボタン=&ボタン
120      ウインドウ終了 &表
121      使用フォーム
122      ケース開始
123        ケース(&ボタン="在庫数")
124            表"商品,tbl"
125            処理行指定 &商品,表 画面消去=する
126            代入 &商品=[商品番号]
127            表
128            表"在庫,tbl"
129            絞り込み [商品番号]=&商品
130            行集計 条件名="在庫集計",データ行=有効
131            表形式編集
132             行集計解除
133            絞り込み解除
134            表
135        ケース(&ボタン="終了")
136            繰り返し中止
137      ケース終了
138   繰り返し終了
139   手続き終了

13695 Re:一括処理のエラー(ウインドウハンドル) 宮田 徹 2001/10/24-23:08
記事番号13686へのコメント
toshi chan様 毎晩遅くになりながらご返事いつもありがとうございます。
まず先にやりたいことを明確にしませんでした。
内容はご指摘の通りで全く違いはございません。そのとおりです。
一括の表形式編集で表示までは何とかこぎ着けました。(先行きは別として)処理の最終段階でつまづいております。
ご指摘の通り"検索.wfm"はオブジェクトは1個です。それはこのフォームで処理内容を案内するためにラベルを使っているだけです。
早速終了コマンドオブジェクトを追加しました。書式も書き直しましたところ最後に"編集対象表がありません"のエラーが出ましたので
私なりに考えたのが書式135行で表を閉じたので繰り返しコマンドに戻ったとき表がないのでエラーが出たのかなと思い
単純に編集対象表を指定してやりました。するとエラーが生じなくなりました。
またこの処理を終了ボタンで終了でき、メインメニューに戻ることが出来ました。
ただ表形式編集画面を最大化にしたかったので132行の前に

ウインドウ作成 表  ハンドル=&表
ウインドウ位置 最大化, &表
ウインドウ終了 &表

を追加しました。
これで桐の一括処理再定義から実行すれば最大化表示するのですがウインドウズのデスクトップから起動すればエラーは出ませんが最大化になりません。
不思議です。ここまでおかげで来ましたので何とか頑張ってみたいと思います。
基本的に考え方が違っておりましたらまたご指摘下さいますようよろしくお願い申し上げます。
********************************************************************************

115名札 在庫3
116  表"zaiko.tbl" 
117   繰り返し
118      使用フォーム "検索.wfm"
119      ウインドウ作成 フォーム, 位置=(100,100),ハンドル=&表
120      ウインドウ会話 &表,ボタン=&ボタン
121      ウインドウ終了 &表
122      使用フォーム
123      ケース開始
124        ケース(&ボタン="在庫数")
125            表"商品,tbl"
126            処理行指定 &商品,表 画面消去=する
127            代入 &商品=[商品番号]
128            表
129            表"在庫,tbl"
130            絞り込み [商品番号]=&商品
131            行集計 条件名="在庫集計",データ行=有効
132            表形式編集
133             行集計解除
134            絞り込み解除
135            表
136        ケース(&ボタン="終了")
137            繰り返し中止
138      ケース終了
139   繰り返し終了
140   手続き終了

13704 Re:一括処理のエラー(ウインドウハンドル) toshi-chan 2001/10/25-19:58
記事番号13695へのコメント
宮田さん、こんばんは。質問があります。

1.検索.wfm のフォームの定義では、編集対象表は設定してあるのですか。

2.下記についてです。

>ご指摘の通り"検索.wfm"はオブジェクトは1個です。それはこのフォームで処理内容を案内するためにラベルを使っているだけです。

ラベルオブジェクトを配置しているのですか?そうだとすると、「在庫数」というオブジェクト名のコマンドボタンは、どこにあるのでしょうか。 
    ケース(&ボタン="在庫数")
という記述がありますが。

3.zaiko.tbl と 在庫.tbl は同じ表?それとも別の表ですか?
13707 Re:一括処理のエラー(ウインドウハンドル) 宮田 徹 2001/10/25-23:28
記事番号13704へのコメント
toshi-chan様大変お世話になります。

1.検索.wfmのフォームの編集対象表は"在庫.tbl"を指定しております。

2.検索.wfmの画面内容は二つのラベルオブジェクトで処理内容を表示しています。そして一つのコマンドオブジェクトでこの処理を開始するため設けています。

3.大変失礼をしました。"zaiko.tbl"はこの度教習用に全く同じ内容のcmdファイルを作っています。
  これであれこれやっていました。混乱してつい教習用のファイル名を告げてしまいました。本来の表は"在庫.tbl"です。
  全く申し訳ありませんでした。

  いろいろと指導いただきながら混乱させてしまってすみません。

13709 Re:一括処理のエラー(ウインドウハンドル) toshi-chan 2001/10/26-02:18
記事番号13707へのコメント
●検索.wfm は、一種のメニューフォームの機能を果たしているようですね。オブジェクトは、
   ラベル2つ・・・・・・・・・・・・処理内容を示す文字列が表示されている
   コマンドボタン1つ・・・・・・オブジェクト名は「在庫数」
ですね。そして今回
   コマンドボタン1つ・・・・・・オブジェクト名は「終了」
を追加し、合計4つのオブジェクトが配置されていることになります。

●検索.wfm の再定義に入り、編集対象表をはずしてみてはいかがですか。その理由は下記です。

(1) 桐のデータは表に格納されています。データは一覧表形式で表示されますが、この方式ではデータの閲覧やデータの編集に不便な場合があります。
これを解消するためにフォームを使用します。カード形式、伝票形式などがありますが、いずれも項目の配置を自由に行うことができて
1件のレコードを見やすい形式で表示することができます。このとき、編集の対象となる表を編集対象表と言います。

(2) フォームには別のタイプもあります。一括処理で使用するメニューフォームです。これはコマンドボタンが配置されており、
データ処理の分岐を行うのが主な目的です。従って、編集対象表はありません。

宮田さんの一括処理を見る限り、検索.wfm を使用してデータの編集をすることはなさそうです。(2)のタイプに属するフォームのようですので
編集対象表は不要なわけです。私が提案した一括処理を動かしたときに
  「編集対象表がありません」
というエラーになったのは、編集対象表が不要なのに指定していたからだと思います。ウインドウ作成コマンドの箇所は
     ウインドウ作成 "検索.wfm", 位置=(100,100),ハンドル=&表
と書くのが正しい書式かな、と思います。使用フォームコマンドは不要になります。


●ウインドウの最大化の件です。宮田さんは
     ウインドウ作成 表  ハンドル=&表
     ウインドウ位置 最大化, &表
     ウインドウ終了 &表   
     表形式編集
と書かれたのではないですか。これだとウインドウを終了してから表形式編集に入ることになります。表形式編集コマンドには、
  「編集対象表のウインドウが無いときは新規に作成する」
という機能があります。このときにはウインドウは最大化されません。宮田さんはこの現象をご覧になっているのでしょう。  
     ウインドウ作成 表  ハンドル=&表
     ウインドウ位置 最大化, &表
     表形式編集
     ウインドウ終了 &表   
と書くと最大化できると思います。また、
     ウインドウ作成 表,ハンドル=&表,オプション=最大化
     表形式編集
     ウインドウ終了 &表   
と書くこともできます。

(一括処理エディタ画面から一括処理を実行するとウインドウが最大化するとのことですが、この理由はわかりません)


●以上を総括すると、一括処理は下記のようになりますね。

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


名札 在庫3
   繰り返し
      ウインドウ作成 "検索.wfm", 位置=(100,100),ハンドル=&表
      ウインドウ会話 &表,ボタン=&ボタン
      ウインドウ終了 &表
     ケース開始
        ケース(&ボタン="在庫数")
            表"商品,tbl"
            処理行指定 &商品,表 画面消去=する
            代入 &商品=[商品番号]
            表
            表"在庫,tbl"
            絞り込み [商品番号]=&商品
            行集計 条件名="在庫集計",データ行=有効
            ウインドウ作成 表  ハンドル=&表
            ウインドウ位置 最大化, &表
            表形式編集
            ウインドウ終了 &表   
            行集計解除
            絞り込み解除
            表
        ケース(&ボタン="終了")
            繰り返し中止
     ケース終了
   繰り返し終了
手続き終了
13717 Re:一括処理のエラー(ウインドウハンドル) 宮田 徹 2001/10/26-23:04
記事番号13709へのコメント
toshi-chan様

ありがとうございます。もう嬉しくて。嬉しくて。。。。。。

1."検索.wfm"の編集対象表をはずしました。そして
   ウインドウ作成"検索.wfm",位置・・・・・に変更しました。
   勿論"在庫,tbl"も削除しました。

2.ウインドウ最大化の件も
   表形式編集コマンドの後にウインドウ終了コマンドを書きました。


   おそるおそる実行ボタンを押したところ最後まできちっときれいに表示をし、すっきりと終了しました。最高な気分です。

   又、次の処理(全商品の在庫数を一覧で見る。)も教えていただいた書式パターンをそっくり生かして記述したところ、これも
   思ったように動きました。今までの何百分の一の早さと楽に出来ました。

   使用フォームを削除したから編集対象表も請求に来なかったのですね。これからはこの書式の一行一行の意味合いをじっくり
   勉強しようと思います。
   この度は大変ありがとうございました。初心者とはいえ質問等に沢山のご無礼があったように思います。
   これからもどうぞよろしくお願い申し上げます。
   
13718 Re:一括処理のエラー(ウインドウハンドル) toshi-chan 2001/10/27-00:47
記事番号13717へのコメント
何とか完成にこぎつけましたね!
一括処理の作成も、壁を越えると少しずつ楽になってきます。
これからもぜひ頑張ってください。

戻る