過去の桐井戸端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へのコメント 何とか完成にこぎつけましたね! 一括処理の作成も、壁を越えると少しずつ楽になってきます。 これからもぜひ頑張ってください。 |