過去の桐井戸端BBS (桐ver.9) |
22597 | イベントで開いているはずの表が「ない」と言われる | 沼田 | 2003/10/06-14:18 |
いつも迷惑ばかりをお掛けします。またよろしくお願いします。 イベント内の行 編集表 集計.tbl で、「編集対象表がありません」とのエラーメッセージが返ってきます。 ちなみに、この行の前に 確認 #文字列(#表オープン状態(集計,1)) と挿入して確認してみますと、値は「0」と返ってきます。 つまり、集計.tblは専有状態では開いている、ということになりますが、このイベント内からは使えない、 ということになるかと思います。 表のオープンモードが関係しているのだとは思っています。 集計.tblは別のイベント内で意識してモード=専有で開いていますから。 今の状態は、「入力.tbl」を編集対象表とする複数のwfm(入力.wfmと表示.wfm)を使い、 集計のためのプログラムは「計算.cmd」に記述し、入力.kev、表示.kev内の イベントから適宜処理を移して計算させるようにしています。 はじめに開かれるのは入力.wfmであり、この時に実行される入力.kev内で集計.tblを専有で開いています。 わざわざ開いているのは、入力.wfmを開く毎に事前に集計.tbl内を整理し、 その結果を変数に取得した後に利用する必要があるためです。 また、それを専有で開いているのは、並べ替えでデータを表示するのではなく 望むところに新規の行を挿入したいという希望があるためです。 また、計算用のプログラムを計算.cmdに記述しているのも、 その他からも同様の計算をさせる必要があり、別のkevファイルからも利用できるようにするためです。 この状態の時、入力.wfmを使っている限りは何の問題も起こりませんが、 フォームを表示.wfmに切り替えた時、計算.cmd内でエラーメッセージが返ってきます。 それが「編集対象表がありません」とのメッセージです。 表示.wfmをオーバーラップ型で開いているのが影響しているのかもしれないとも思いましたが、 入力.wfmと表示.wfmは切り替えながら使っていきたいので、 オーバーラップ型にしておきたいと思っています。 今日、お尋ねしたいことは、表が開いているにも関わらず編集対象にできない理由は何なのか、ということです。 また、どのようなパターンの時にこのような状況になってしまい、 これを解決するには何に気を付けなければならないのか、ということです。 そして、できれば解決策などがあれば、ぜひお聞かせ下さい。 桐のバージョンは、Ver9 sp1 です。よろしくお願いします。 | |||
22599 | Re:開いているはずの表が”ない”と言われます | ONnoji | 2003/10/06-17:01 |
記事番号22597へのコメント 沼田さん、こんにちは。 投稿された情報からだと、肝心のこと(だと思っている)が…?? Aパターン これは一括処理実行で行っている処理でしょうか? つまり、一括処理実行で開いたフォームにイベントもあるということなのでしょうか? Bパターン それとも、一括処理を全く用いずに、イベントだけで実行して、 [ライブラリ]コマンドで 計算.cmd を使用しているのでしょうか? すいません、オーバーラップ云々で一括処理なのか否か直ぐに判るのかもしれませんが… 私には判断が付かないもので(^^ゞ Aパターン:一括処理 + イベント処理 Bパターン:イベント処理 + ライブラリ どちらでしょうか? どちらかハッキリすればリプライも多くなりそうに思いますが… 外していたら、すいません。 | |||
22600 | Re:開いているはずの表が”ない”と言われます | うにん | 2003/10/06-17:20 |
記事番号22597へのコメント >イベント内の行 > 編集表 集計.tbl >で、「編集対象表がありません」とのエラーメッセージが返ってきます。 編集表コマンドのヘルプによると「イベントハンドラ内で実行した場合でも、 指定した表に切り替わります。ただし、ハンドラが終了した時点で、 フォームの編集対象表に戻ります。フォームに編集対象表を定義していない場合は、 対象表がない状態に戻ります。」 なので、フォームに編集対象表が定義されてないのでは? | |||
22601 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/06-18:22 |
記事番号22599へのコメント ONnojiさん、いつもすいません。ご迷惑をお掛けします。 パターンは「B」の、イベント処理+ライブラリ です。 イベント処理で自動処理ができるようになってからの桐は、細かな処理が出来るようになったという感覚がありますが、 同時に一括処理での自動処理に比べて複雑になったような気がしています。 一括処理時代では、一括処理を概観し、疑問に思ったところは表定義やFRMの定義を確認すれば 大方のところは解決したように思っています。 それに比べて、イベントはそれぞれのオブジェクト毎に設定されていますから、 全体をざっと見渡すには不向きではないでしょうか。それぞれのファイルなり、 リンク関係などが頭に入っているならチェックすべき箇所も当たりが付けられるでしょうが、 全体像を把握していない者がkevファイルと表定義・フォーム定義などを開きながら、 お互いの関係をチェックしていくのは大変骨の折れる作業です。 さらに、一括処理内で使えるイベントとそうでないものもあったり、動作が違ってくるコマンドもあったり、 パターンによって制限がかかるものもあったりで、慣れるまでが大変です。 今回の問題も、たぶんそのような問題なのでしょう。慣れるまでの....。 今回は一括処理からは動かしていません。初期設定も、(無理矢理という感じもしながら) 入力.kevのメインに記述しています。 全ての始まりが入力.kevになっています。対応するwfmは入力.wfmであり、編集対象表は入力.tblです。 はじめに入力.wfmを実行するようにしていますから、まず入力.kevのメインが 処理されると思っています。 この中で集計.tblを専有で開くように記述しています。その後に入力.tblが開かれると理解しています。 入力.wfmには表引きの設定などもいくつかありますので、それぞれで使う表も同時に開かれていくはずだと思います。 集計.tblは入力.wfm内の複数のオブジェクトで参照するように設定されていますので、 入力.kevのメインで開いておかなくても良いとは思いますが、 事前の作業で変数に取得したい事情がありますから、あえてメインで開いて所要の作業をさせています。 この時、作業の終わった集計.tblは閉じていません。 この辺りが影響しているのでしょうか。 一括処理からのイベント処理と、フォームからのイベント処理がどのように違ってくるのかは理解できていません。 というより、なぜ同じような処理の方法がcmdファイルとkevファイルの2つ用意されているのかが理解できていません。 cmdファイルがライブラリとして利用されるためにあり、桐V5時代のプログラムファイルとして使えるのは、 一種の方便かとも感じましたが、そうでもないような気もしますし、正直、混乱してしまっています。 何か、糸口でも教えていただけるとうれしく思います。よろしくお願いします。 | |||
22602 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/06-18:51 |
記事番号22600へのコメント うにんさん、いつもご迷惑をお掛けします。 問題の起きているwfmは表示.wfmであり、この編集対象表は入力.tblです。 表示.wfm内にコマンドボタンを置き、ライブラリ「計算.cmd」内に記述してある手続きを実行させるようにしています。 ちなみに、表示.wfmには集計.tblの項目値を表引き関数で参照するオブジェクトが置かれており、 こちらは問題なく表示されています。 計算.cmd内の手続きは、入力.wfmからの入力値によって集計.tblの項目値を加減乗除するもので、 この処理を表示.wfmからもさせようとしているものです。 入力.wfmにも同様のコマンドボタンが置かれており、計算.cmd内の手続きを実行させています。 同じ手続きがwfmによって実行できたり出来なかったりする、という問題です。 入力.wfmと表示.wfmの違いは、どちらもオーバーラップ型のフォームにしてありますので、 開く順序くらいしか思い当たりません。 試しに、計算.cmd内の記述を、 多重化 表 集計 とすると、問題なく動作します。 当然という気もしますが、計算.cmd内で作業させる度に新しい表が開くことになり、 それはすぐに制限の40個を超えてしまいます。 これでは実用になりませんので、何とかならないものかと思っているのです。 | |||
22603 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/06-19:02 |
記事番号22597へのコメント 沼田さん、こんばんは。 「編集対象表がありません」メッセージの前後に、「表はすでに開かれています」旨のメッセージが出るようなら、 表を多重化すれば、別フォーム(表示.wfm)をちゃんと開けるようになります。 共有モードが「なし」の場合(=専有)でも、オーバーラップの場合でも、 いけるはずです。 多重化をどのタイミングでするかは検討の余地がありますが、テストとして、 入力.wfmにコマンドボタンをちょっとつけて、試してみてください。 (ついでに、多重化するとどうなるかというと、双方を更新許可している場合、 入力フォームと表示フォームのどちらからでも、データを更新すると即座にもう一方のフォームにも反映します。) 手続き定義開始 コマンドボタン_1::マウス左クリック(・・ method @フォーム.更新モード設定( 0 ) /* この行の「フォーム」は半角で記述してください。 */ 編集表 "集計.tbl" 多重化 ウィンドウ作成 "表示.wfm" , ハンドル = &・・ , 編集表 = する 手続き定義終了 たちまちこんな感じで。 で、cmdがライブラリなのかマニュアル操作(一括処理実行)なのかわからないので、 一応、cmdは使用しないでみてください。 なお、ウィンドウ作成コマンドで作成したフォームを制御するには、 フォーム呼び出しコマンドと違って、細心の注意を要します。 ・・・・・・忍耐も(^^; アックン(=^・^=) | |||
22604 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/06-19:12 |
記事番号22602へのコメント ちょっとこちらにつけさせてください。 >試しに、計算.cmd内の記述を、 > 多重化 > 表 集計 >とすると、問題なく動作します。 >当然という気もしますが、計算.cmd内で作業させる度に新しい表が開くことになり、そ >れはすぐに制限の40個を超えてしまいます。 まだ詳細に読んでないのですが、多重化でいけるんでしたら、 表が開いているかどうか調べてから、開いてないときだけ多重化すればいいのでは? えっ、そんな問題じゃないとか。アックン(=^・^=; | |||
22605 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/06-19:34 |
記事番号22602へのコメント どもっ、沼田さん、横から失礼します。 >試しに、計算.cmd内の記述を、 > 多重化 > 表 集計 >とすると、問題なく動作します。 >当然という気もしますが、計算.cmd内で作業させる度に新しい表が開くことに >なり、それはすぐに制限の40個を超えてしまいます。 単に「多重化」させただけだと、どの表を多重化させるのかが不定となりうるのでありませんか? 「問題なく動作」するには、この前の状態なり記述なりに依存するような気がしないでもありません。 とすれば、場合によっては 編集表 "集計.tbl" 多重化 *表 "集計.tbl" ←これ不要では? あるいは「編集表 "集計.tbl"」の誤記? としなければならないとしたら、元の木阿弥ですよね。(^^;) それはさておいて、「制限の40個」問題に限って云えば 多重化 &集計多重化表番号=#is表 としておいて、所定の処理が終わった時点でもって必ず 終了 表 &集計多重化表番号 (または、単に 終了 表 編集対象表) としておくと云う方法は使えませんか? | |||
22606 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/06-19:44 |
記事番号22604へのコメント アックンのコメントを読んでパッコンと閃きました。(^^;) #22597でwrote >ちなみに、この行の前に > 確認 #文字列(#表オープン状態(集計,1)) >と挿入して確認してみますと、値は「0」と返ってきます。 「#文字列」関数で変換しているから0となってしまうけれども、 この時の「#表オープン状態」関数の返り値は、実は未定義値だったのではありませんか? (つまり当該表は開かれていない) とすれば、使うべき関数は例えば「#表番号取得」なのでは? if(#表番号取得("念のためフルパス名付きで集計.tbl")<1) 表 "集計.tbl" else 編集表 "集計.tbl" end &集計多重化表番号=#is表 /*制限40個対策用*/ ・・・・(以下略) | |||
22608 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/06-19:56 |
記事番号22606へのコメント 補足。 確認 #文字列(#表オープン状態(集計,1)) ではなく 確認 #表オープン状態(集計,1) で確認した方が正確だと思います。 特に未定義とゼロを区別するためには。 | |||
22609 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/06-22:47 |
記事番号22608へのコメント アックン、悲しげさん、ありがとうございます。 > 確認 #表オープン状態(集計,1) >で確認した方が正確だと思います。 >特に未定義とゼロを区別するためには。 > 納得です。 そうですね。確認する時に他の戻り値などもついでに見てみよう かなどと考えたせいで、いくつかの戻り値をまとめて見るために文字列にしてくっつけていました。 ここではその一部だけを書いたたためにこんなことになりました。 失礼しました。 ところで集計.tblが開いているのかどうかという点ですが、多重化コマンドを書かないと開けません。単に 表 集計.tbl とするとエラーが返ってきていました。 (実は、今ここで試してみることが出来ない事情がありますので、明日もう一度確認することにします) 気になるのは、表のオープンモードです。 「表を専有で開く」ということが理解できずにいます。 入力.wfmを使うために入力.kevを実行し、その中で集計.tblを専有で開いていますので、 もしかすると入力.kev以外からのアクセスは専有違反(?)になってしまうとか、そんなことはないのでしょうか。 | |||
22610 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/06-23:10 |
記事番号22605へのコメント 悲しげさん、何回もありがとうございます。 > 編集表 "集計.tbl" > 多重化 > *表 "集計.tbl" ←これ不要では? あるいは「編集表 "集計.tbl"」の誤記? どうも、僕は「多重化」の使い方を完全に誤解していたようです。 多重に開くべき表を宣言する前にこのコマンドを置いておかなければならないものと信じ切っていましたから。 それはそれとして、 現在の所は「多重化」の処理で何とか動かしていますし、いくつかのkevから該当の処理を呼び出す時には、 処理が終わる都度に表を閉じるようにしています。 しかし、その処理は、 どう考えても、一言で言うと「不格好」です。 必要な表は予め開いておけば、必要な時に切り替えて使えるようになっているはずだ、 と、考えてしまうのです。そしてその表は、自分の意志で閉じるまでは開き続けているはずだと。 今回の問題は、この僕の見方から外れてしまっていて、集計.tblは自分の意志でわざわざ開き、 それを閉じるタイミングにも希望があり、 それ以外の箇所で「編集表がありません」とエラーが返ってくるのが納得できないでいるのです。 思い当たることは、自分が開いたkevから別のkevに処理が移ったためではないかという位ですが、 それにも何の根拠も持っていないのです。 もしそうなら、その仕組みを理解したいと思いますし、 違っているならその原因を知りたいと思っているのです。 | |||
22611 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/07-01:48 |
記事番号22610へのコメント う〜ん、仰る意味がよく判りません。 >> 編集表 "集計.tbl" >> 多重化 >> *表 "集計.tbl" ←これ不要では? あるいは・・・・ > >どうも、僕は「多重化」の使い方を完全に誤解していたようです。 >多重に開くべき表を宣言する前にこのコマンドを置いておかなけ >ればならないものと信じ切っていましたから。 ここで云う「このコマンド」ってのはどのコマンドですか? >ところで集計.tblが開いているのかどうかという点ですが、 >多重化コマンドを書かないと開けません。単に > 表 集計.tbl >とするとエラーが返ってきていました。 う〜ん、ここも意味が判りません。単に表を開くとどのようなエラーが出るのですか? それと私が懸念していたもうひとつは、多重化は大いに結構だと思いますが、単に 多重化 と記述するだけだと、その直前に編集表であった表を多重化するのだから、 どの表が多重化されるのか、不定になってしまうのではないかと云うことです。 編集表が「入力.tbl」とやらである可能性はないか? あるいはもしこの時に編集表が既に「集計.tbl」であったとすれば、 (「多重化」云々以前に)そもそも 編集表 "計算.tbl" と記述する意味がありませんし、とすると当初の質問の意味も・・・? でも、もしかすると、初回の質問にも全く記述されてませんでしたが、 処理の中心は多重化表を使うことにあり、そのために「多重化」コマンドの直前で、 念のために「編集表」コマンドを使おうとしたら、 エラーとなって困っている、と云うことなんですか? そのようには全く書かれていないから、一寸深読みすぎるかな?(^^;) | |||
22613 | Re:記述ミス? | 尾形 | 2003/10/07-06:56 |
記事番号22597へのコメント > 編集表 集計.tbl 編集表 "集計.tbl" ダブルコーテーションで囲む必要があるのではないですか? | |||
22615 | Re:記述ミス? | 沼田 | 2003/10/07-09:21 |
記事番号22613へのコメント >編集表 "集計.tbl" >ダブルコーテーションで囲む必要があるのではないですか? 緒方さん、こんにちは。 確認してみましたが、ダブルコーテーションで囲む必要はないようです。 通常は「.tbl」までは記述していません。面倒ですから。 たぶんですが、「編集表」コマンドを記述すると続いて記述されるべきは表の名前であるはずですから、 システムが自動的に「.tbl」を付加して処理するのではないかと思っています。 このような「当然こうだ」というパターン以外の場合には、 文字列であることをシステムに知らせるためにダブルコーテーションで囲む必要が出てくるのではないかと、 勝手に納得しています。 違ってたら教えていただけるとうれしく思います。 | |||
22617 | Re:記述ミス? | うにん | 2003/10/07-09:47 |
記事番号22615へのコメント >確認してみましたが、ダブルコーテーションで囲む必要はないようです。 >通常は「.tbl」までは記述していません。面倒ですから。 >たぶんですが、「編集表」コマンドを記述すると続いて記述されるべきは表の名前 >であるはずですから、システムが自動的に「.tbl」を付加して処理するのではない >かと思っています。 「ファイルの名前を文字列型の計算式で指定します。」なので、拡張子は省略できますが""を省くのは間違いです。 たまたま動いているだけです。 | |||
22618 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/07-09:58 |
記事番号22611へのコメント 悲しげさん、ややこしい言い回しで申し訳ありません。 「多重化」コマンドの使い方に限って言うなら、僕は今までこのコマンドは 「これから開こうとしている表は多重で開くんですよ」ということをシステムに宣言するものだと思っていました。 だから、表コマンドを書く前に書いておかなければいけないものだと思っていたのです。 これを書くことによって、既に開いている表を改めて開くことが出来るのだと思っていたのです。 >ますが、単に > 多重化 >と記述するだけだと、その直前に編集表であった表を多重化するのだ >から、どの表が多重化されるのか、不定になってしまうのではないか 多重化コマンドが「その直前に編集表であった表を多重化する」ものだという認識がありませんでした。 僕が多重化コマンドを使う目的は、そのまま処理を続けようとすると「ファイルはすでにオープンされています」などの エラーになってしまう場合の回避策でしかないのです。 たまたまエラーを返す行(編集表コマンド)の前に多重化コマンドを置いてみたらうまく動くようになったので、 それ以降はそのような使い方しかしてきませんでした。 たぶん、偶然にも直前に使っていた編集表に合っていたために動くようになっていたのではないかと思います。 ですから、 多重化 表 開こうとしたらエラーになってしまった.tbl というコマンドの書き方でないとダメだと思い込んでいたのです。 多重化コマンドの理解の仕方については、今までの認識が間違っていますので 今後の課題ですが、今回の問題は多重化コマンドの使い方ではありません。 自分では開いたままになっているはずと思っていた表が、実際には閉じられてしまっている、 ということが理解できずにいるのです。 昨日以降でいくつか試してみたことがありますので、混乱を避けるために別に投稿します。 | |||
22619 | Re:記述ミス? | 幅田 | 2003/10/07-10:01 |
記事番号22617へのコメント >""を省くのは間違いです。たまたま動いているだけです。 そうですね。 編集表 2 とした場合、普通は表番号 2で開かれている表を編集対象にするという意味で、 2.TBL というファイルを編集対象にするという意味ではありませんね。 ですから、2.TBLというファイルを対象にする場合は、 編集表 "2" という風に、""で囲むことになります。 たまたま、動いているからそれでいいのではなく、 記述間違いで思わぬ結果をまねくのを防ぐためにも 正しい記述で書くようなクセをつけたほうがいいと思います。 | |||
22620 | Re:記述ミス? | 沼田 | 2003/10/07-10:08 |
記事番号22617へのコメント うにんさん、ありがとうございます。 >「ファイルの名前を文字列型の計算式で指定します。」なので、拡張子は >省略できますが""を省くのは間違いです。たまたま動いているだけです。 全く気が付きませんでした。桐5時代から""を付けた記憶がありません。 それで動いていましたし、何かの支障が出た記憶もありません。 ""を付けるのが本来の書式でしょうし、もしかすると拡張子も付けておいた方が良いのかもしれませんが、 例えばこれらを省いてしまって、僕が今まで書いてきたように 「表 ○○」や「編集表 ○○」とだけ記述した場合に出てくる支障などはあるのでしょうか。 | |||
22621 | Re:記述ミス? | 沼田 | 2003/10/07-10:24 |
記事番号22619へのコメント 幅田さん、ありがとうございます。 >正しい記述で書くようなクセをつけたほうがいいと >思います。 全くその通りですね。 大した手間でもないのに、ついつい省けるものは省いてやろうという根性が身に付いてしまっているようです。 ちょっと情けないですね。 改めて自分のプログラムを見てみますと、 &変数=あいう+えお みたいなことも平気で書いていました。これこそ間違いの元ですよね。 反省します。 | |||
22623 | 糸口にすこしなるような気がしますけれど | ONnoji | 2003/10/07-11:33 |
記事番号22601へのコメント 沼田さん >ONnojiさん、いつもすいません。ご迷惑をお掛けします。 >パターンは「B」の、イベント処理+ライブラリ です。 > >それに比べて、イベントはそれぞれのオブジェクト毎に設定されていますから、全体をざっと見渡 >すには不向きではないでしょうか。それぞれのファイルなり、リンク関係などが頭に入っているな >らチェックすべき箇所も当たりが付けられるでしょうが、全体像を把握していない者がkevファイ >ルと表定義・フォーム定義などを開きながら、お互いの関係をチェックしていくのは大変骨の折れ >る作業です。さらに、一括処理内で使えるイベントとそうでないものもあったり、動作が違ってく >るコマンドもあったり、パターンによって制限がかかるものもあったりで、慣れるまでが大変で >す。 >今回の問題も、たぶんそのような問題なのでしょう。慣れるまでの....。 今回のことはイベントに慣れているか否かの問題ではないと思いますけれど…(^^ゞ >今回は一括処理からは動かしていません。初期設定も、(無理矢理という感じもしながら)入 >力.kevのメインに記述しています。全ての始まりが入力.kevになっています。対応するwfmは入 >力.wfmであり、編集対象表は入力.tblです。 >はじめに入力.wfmを実行するようにしていますから、まず入力.kevのメインが処理されると思っ >ています。この中で集計.tblを専有で開くように記述しています。その後に入力.tblが開かれる >と理解しています。 入力.wfm/入力.tbl/入力.kev --> 集計.tblをイベント処理の[名札 メイン]でオープン >入力.wfmには表引きの設定などもいくつかありますので、それぞれで使う表も同時に開かれていく >はずだと思います。集計.tblは入力.wfm内の複数のオブジェクトで参照するように設定されてい >ますので、入力.kevのメインで開いておかなくても良いとは思いますが、事前の作業で変数に取得 >したい事情がありますから、あえてメインで開いて所要の作業をさせています。 >この時、作業の終わった集計.tblは閉じていません。 >この辺りが影響しているのでしょうか。 入力.tbl --> 表引きを使用している >一括処理からのイベント処理と、フォームからのイベント処理がどのように違ってくるのかは理解 >できていません。 >というより、なぜ同じような処理の方法がcmdファイルとkevファイルの2つ用意されているのか >が理解できていません。cmdファイルがライブラリとして利用されるためにあり、桐V5時代のプロ >グラムファイルとして使えるのは、一種の方便かとも感じましたが、そうでもないような気もしま >すし、正直、混乱してしまっています。 >何か、糸口でも教えていただけるとうれしく思います。よろしくお願いします。 まず、[桐ファイルパレット]を開いて、[編集表]ボタンを実行して、 一覧の[ファイル名]と[ビュー]と[使用フォーム名]等を確認されたらいかがでしょうか? 糸口にすこしなるような気がしますけれど… 外していたらすいません。 <追伸> リテラルな文字列の二重引用符の省略に関して、 桐は特殊な文字、つまり演算子や数字や記号などを含む文字列では二重引用符は省略できないけれど、 通常の文字ならば二重引用符を省略できたと思います。 しかし、思わぬエラーの原因になるので、リテラルな文字列の場合には二重引用符を省略するのは良い習慣とはいえないと思います。 KU1090:コマンドの形式に誤りがあります × 表 自転車-リスト ○ 表 "自転車-リスト" なお、今回の件とは関係ありませんが(^^ゞ なお、目的の表( .tbl )が存在しない場合で、終了状態パラメータを指定した時には注意が必要です。 ※ファイル名にパスを指定しない場合には現在のデータパスが適用されると思います… *これは一括処理の場合の例 変数宣言 固有,整数{ &status } 表 "自転車-リスト",終了状態= &status ← エラーにはならない 表形式編集 ← KU1171:編集対象表がありません | |||
22624 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/07-11:34 |
記事番号22597へのコメント もう一度、整理してみたいと思います。 入力.tblを編集対象表としている入力.wfmと表示.wfmがあります。 表示.wfmは入力.wfmに置かれているコマンドボタンから呼び出すホップアップ形式のフォームです。 (前回のオーバーラップ形式は間違いです) 入力.wfmに対応している入力.kevのメイン部で集計.tblを専有で開いています。 集計.tblは入力.kevの行挿入イベントなどで使われます。この行挿入イベントでは、 ライブラリに指定されている計算.cmd内の手続きが指定されています。集計.tblを使った処理は計算.cmd内の手続き内で行われます。 表示.wfmに対応している表示.kev内にも行挿入イベントが定義されており、 入力.kev内の行挿入イベントの内容とほぼ一致しています。(違っているところは表示.wfmに対する 表示に関する部分や項目値を変数に取り込む部分などです) 入力.kevのイベントからも表示.kevのイベントからも、同じように計算.cmd内の同じ手続きを実行するようにしてあります。 この時、入力.kevからの実行ではエラーは表示されませんが、表示.kevからの実行では 「編集対象表がありません」とのエラーが返ってきます。 エラーの行番号を確認すると 編集表 集計 の行に該当します。(正確には「編集表 "集計.tbl"」でしょうか) #表番号取得(集計)関数を使って集計.tblが開かれているのかどうかを調べたところ、 表示.kevが実行される時点では開いています。(戻り値が返ってきていますから) 表示.kevのフォーム開始イベントの最終行に 確認 #文字列(#表番号取得("集計")) としたところ、「2」という戻り値が返ってきました。 この時点では集計.tblは開いていると思います。 次に、表示.kev内のレコード移動イベント内にも 確認 #文字列(#表番号取得("集計")) としたところ、空白しか返ってきませんでした。 この時点で集計.tblが開いていないと思います。 この2つの動作の間には、実際に表示.wfmが画面に表示されるかどうかだけだと思うんですが、 そんなことで表が閉じたりするものでしょうか。 | |||
22625 | Re:論より証拠 | ONnoji | 2003/10/07-11:58 |
記事番号22624へのコメント 沼田さん、こんにちは。 No.22623にも書きましたが…論より証拠! まず、[桐ファイルパレット]を開いて、[編集表]ボタンを実行して、 一覧の[ファイル名]と[ビュー]と[使用フォーム名]等を確認されたらいかがでしょうか? 糸口にすこしなるような気がしますけれど… | |||
22628 | Re:開いているはずの表が”ない”と言われます | うにん | 2003/10/07-12:35 |
記事番号22624へのコメント >「編集対象表がありません」とのエラーが返ってきます。 >エラーの行番号を確認すると > 編集表 集計 >の行に該当します。(正確には「編集表 "集計.tbl"」でしょうか) 試してませんし根本的な解決ではないですが、 多重化したり表番号を指定する必要がないなら、編集表でなく表コマンドを使えば、 開くか切り替えるか勝手に判断してくれるようです。 | |||
22629 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-13:52 |
記事番号22608へのコメント > 確認 #文字列(#表オープン状態(集計,1)) >ではなく > 確認 #表オープン状態(集計,1) >で確認した方が正確だと思います。 >特に未定義とゼロを区別するためには。 悲しげさん、後者はアップ時の記述ミスでしょ。 (#表オープン状態は数値を返すから、確認コマンドではエラーになるっしょ。) で、そんなことはいいんですけど、下記の二つの例では同じ値を返します。 例1 確認 #str(#表オープン状態("集計.tbl",1)) 例2 &秒=#表オープン状態("集計.tbl",1) if(&秒="") &STR="集計.tbl"+" は開いていません" else if(&秒=0) &STR="集計.tbl"+" は専有で開いています" else if(&秒=1) &STR="集計.tbl"+" は共有で開いています" end 確認 &STR | |||
22630 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-13:52 |
記事番号22628へのコメント >多重化したり表番号を指定する必要がないなら、編集表でなく表コマンドを >使えば、開くか切り替えるか勝手に判断してくれるようです。 うにんさん、そうでしたね。一括マニュアルの「表 <表ファイル名>」の記載、 「再び開くことになる場合は、表を開かずに指定した表を編集対象表にします。」ですね。 続く「ただし、・・」の制限に該当しないなら、この方法いいですね。 >>「編集対象表がありません」とのエラーが返ってきます。 >>エラーの行番号を確認すると >> 編集表 集計 >>の行に該当します。(正確には「編集表 "集計.tbl"」でしょうか) 沼田さん、この行の記述を直されましたか? すでにみなさんからご指摘があったことでしつこいようですが、 ダブルクォーテーションで囲まないと、動作が不定になります。 「.tbl」は省略できますから、「編集表 "集計"」とするだけでオーケーです。 (この例はあくまでフルパス名をつけないときです。データパス名の変更がないか、 注意なさってください。) で、ここを修正してもなお同じエラーが出るようでしたら、ONnojiさんの書かれている 確認方法(ファイルパレットの編集表タブで確認する)で、 確実にファイル状態が明示されますから、やってみてください。 もし入力.wfmのウィンドウの形式がオーバーラップだと、ファイルパレットを開けないので、 表示.wfmと同様にオーバーラップに変更してください。 で、テストの結果、表がいったん開かれたものの、どこかで閉じられたとしたら、 こういう推測ができます。 勝手に閉じるものなのか?という疑問がおありのようですけど、勝手に閉じているのではなく、 どこかで作者が意識してない、表を閉じる命令が潜んでないか、探してみてください。 とくに編集対象表や編集表を切り替える場面で発生します。 | |||
22632 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/07-15:22 |
記事番号22629へのコメント どもっ、アックン >悲しげさん、後者はアップ時の記述ミスでしょ。 >(#表オープン状態は数値を返すから、確認コマンドではエラーになるっしょ。) 仰せのとおりです。(^^;) すいません、完璧な勘違い。<(_ _)> | |||
22634 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/07-15:57 |
記事番号22632へのコメント それと、 確認 #str(&秒) とした場合も、&秒="" と &秒="" はきちんと区別して表示されました。<(_ _)> ところで、もう1点、 外している可能性大ながら、もし沼田さんのやられている処理が、 ディレクトリをまたいでいるとしたら、データパスの関係が出てきます。 ので、必要があれば表ファイル名をフルパス付で記述するのも一案かと。 このところ、外しまくり。(^^;) | |||
22638 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/07-17:30 |
記事番号22630へのコメント みなさん、有り難うございます。もう少しお付き合いいただけるとうれしく思います。 コマンド行の記述については訂正した上で試してみましたが、同じようにエラーが表示されます。 エラーは「編集対象表がありません」というものですので、ONnojiさんの方法でファイル状態を確認してみました。 結果は、"集計.tbl"は一覧に載っていません。開いていないと確認できました。 念のためと思い、もう一度 "表示.kev"のフォーム開始イベントに 確認 #文字列(#表番号取得("集計")) を追加して実行してみたところ、戻り値は「1」と表示されました。 これは、この時点までは"集計.tbl"が表番号1で開いている、と理解してもいいのでしょうか? その後に、実際に画面が書き変わり、"表示.wfm"が表示された時点では#表番号取得()関数での戻り値は 「空白=未定義」になりますので、"集計.tbl"は開いていないと判断できると思います。 "表示.wfm"が表示された時点でファイルパレットが使えるようになり、編集表タブからファイルの状態が確認できるようになります。 この時点での確認では、一覧に無く、表番号1の行は空欄となっていますから、開いていないと判断できると思います。 表番号取得関数での戻り値が空白であることと符号します。 マニュアルには、イベントハンドラ内で開いた表はフォームが閉じられた時点で同時に閉じられる、とあります。 今回の問題の"集計.tbl"は、"入力.kev"内で開かれていますから"入力.wfm"を閉じた時点で"集計.tbl"も閉じられる、 と解釈すべきなんでしょう。 kevファイル内に閉じるような記述が見当たらないことから、 これ以外には考えられないような気がします。 そして、"入力.wfm"が閉じられるタイミングは、別のフォーム"表示.wfm"が実際に画面に表示される時、 ということになってしまいます。 当初は、フォームが切り替わるタイミングは次に開かれるフォームのkevファイルのメイン部が実行される前、 と思っていましたから、次のフォーム開始イベントが始まっている時点で開いている表がなぜ途中で閉じてしまうことになるのか 理解できなかったのです。 閉じられるなら"表示.kev"が実行される前だろうと勝手に思っていましたから。 これは苦し紛れの勝手な解釈ですが、これで良いのでしょうか。 | |||
22640 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-17:50 |
記事番号22638へのコメント ありゃま、がびーん...。 入力.wfmを閉じていないものとばかり解釈してました。 入力.wfmを閉じれば、集計.tblも閉じるでしょう。マニュアルのとおりかと。 何度かこのことを書き足そうと思っていたのですが、まさかねと思って書きませんでした。 じゃ、どうするかとなると、入力.tblを閉じなければいいわけで、それじゃだめですか。 あるいは、入力wfmを一時的に非表示にしちゃうとか。 アックン(=^・^=) | |||
22641 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-17:52 |
記事番号22640へのコメント >じゃ、どうするかとなると、入力.tblを閉じなければいいわけで、それじゃだめですか。 入力.tblじゃなくて入力.wfmです。m(__)m | |||
22642 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-18:00 |
記事番号22634へのコメント >とした場合も、&秒="" と &秒="" はきちんと区別して表示されました。<(_ _)> ""の中の半角スペースがアップ時に1個消えたのかにゃ?(^^; >このところ、外しまくり。(^^;) そんなことないよ。(=^・^=) | |||
22643 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/07-18:08 |
記事番号22641へのコメント 実は、僕自身も"入力.wfm"は閉じたくないんです。 "入力.wfm"も"表示.wfm"も、どちらも"入力.tbl"をどんな形式で見て編集するのか、だけのことですから。 そんなつもりはなくても、どうも"表示.wfm"を表示させると自動的に閉じるようになってしまっているようです。 こちらの想定外(希望外)のことです。 "表示.wfm"をポップアップ形式にしているのが原因でしょうか。それとも、"入力.wfm"からの呼び出し方法が 適切ではないのかもしれません。 "入力.wfm"に置かれているコマンドボタンの機能に「フォームの選択」を指定しています。 いくつかの方法があるようですが、その区別が理解できていませんから、とりあえず動くこの機能を選択しています。 もっと適切な設定があるのかもしれません。 それで、"入力.wfm"を閉じないままで別の"表示.wfm"を使う方法ですが、例えば「一時的に非表示にしておく」 という方法が具体的にどのような方法を指すのか分かりません。 お教えいただければ幸いです。 | |||
22645 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/07-19:10 |
記事番号22643へのコメント ちょっと、幅田さんへ> えっと、新たな質問ということで、別スレ立てるほうがいいんでしょうか。 その場合は、沼田さんに改めて書いてもらうとして、一応ここに続けて書きますね。 沼田さんへ> 入力.tblが閉じていると、当然のことながら非表示にできないですし、 まずは、表示.tblを入力.tblのコマンドボタンで開く方法を変更してみることをおすすめします。 そうすれば、入力.wfmが閉じなくなると思うんです。 コマンドボタンを使いますが、機能で「フォームの選択」を使いません。 機能やパラメータを一切使わず、マウス左クリックイベントに次のようなコマンドを書きます。 例1: フォーム呼び出し "表示.wfm" /* 入力.wfmを直接操作できません。入力.wfmと表示.wfmのウィンドウ間を行き来できません。 */ 例2: ウィンドウ作成 "表示.wfm" /* 入力.wfmを直接操作できます。入力.wfmと表示.wfmのウィンドウ間を行き来できます。 */ 一見して例2が操作しやすいようですが、制御がたいへんなので、おすすめしません。 例1の方法が確実です。案ずるより試してみる方が近道ですよ。(^^) | |||
22653 | Re:開いているはずの表が”ない”と言われます | 悲しげ | 2003/10/07-21:46 |
記事番号22645へのコメント ちょいと横道。(^^;) アックン wrote >例1: フォーム呼び出し "表示.wfm" >例2: ウィンドウ作成 "表示.wfm" > >一見して例2が操作しやすいようですが、制御がたいへんなので、おすすめしません。 >例1の方法が確実です。案ずるより試してみる方が近道ですよ。(^^) そそ、そうで〜す。私は「モーダル命」(つまりは「フォーム呼び出し」命) と決めてから、この辺りで悩むことはまったく無くなりました。(^^;) 私としては、特に初心者の方にお勧めしたいと思っているのですが、なぜか、 少数派で。だからアックン様にそう云って戴けると嬉しいです。(^^;) モードレス※は初心者の悲しげ ※ここでは「モードレス」は「非モーダル」の意味で使っています。 | |||
22658 | Re:開いているはずの表が”ない”と言われます | ONnoji | 2003/10/08-00:47 |
記事番号22643へのコメント >実は、僕自身も"入力.wfm"は閉じたくないんです。 >"入力.wfm"も"表示.wfm"も、どちらも"入力.tbl"をどんな形式で見て編集するのか、 >だけのことですから。 >"入力.wfm"に置かれているコマンドボタンの機能に「フォームの選択」を指定しています。 >いくつかの方法があるようですが、その区別が理解できていませんから、 >とりあえず動くこの機能を選択しています。もっと適切な設定があるのかもしれません。 沼田さん、こんばんは。 入力.wfm(入力.tbl) → 表示.wfm (入力.tbl)の目的で「フォームの選択」を、選ばれたようですね。 「フォームの選択」では、いったん入力.wfmを閉じて、表示.wfmで開き直す、という動作になると思います。 つまり、入力.tblを開いたまま、フォームの付け替えを行うのですから、 別の言い方をすれば、入力.wfmを閉じて → 表示.wfmを開く と同じですね。 つまりイベント( .kev )も 入力.kevを閉じて → 表示.kevを開く ですから、 入力.kev の[名札 メイン]で開いた集計.tblは、 入力.kevが閉じた時点で閉じられてしまうという具合だと思います。 >それで、"入力.wfm"を閉じないままで別の"表示.wfm"を使う方法ですが、 これは、編集対象表が同じなので編集対象表を多重化しない限り無理だと思います。 そこで、入力.wfm(入力.tbl)→「フォームの選択」→表示.wfm (入力.tbl)方式は、そのままにしておき、 事前に一工夫するという方法を考えてみました。 現在は入力.wfmを開くところから出発していますが、 これを(仮名で)事前準備.wfm というものを準備して、 事前準備.wfm → 集計.tblをイベント処理の[名札 メイン]でオープンとした後に、 コマンドボタンの機能名:[開く]等で、入力.wfmを開きます。 そうすれば、事前準備.wfm は閉じられないのですから、 ず〜っと集計.tblが利用できるだろうと思います。 なお、事前準備.wfmをオーバーラップ形式として、 入力.wfmと表示.wfmをポップアップ形式とすればいいと思います。 ※放っていてもポップアップになると思いますが・・・ 入力.wfmと表示.wfm はフォームの属性で"最大化"を指定しておけば、 事前準備.wfmはこれらのフォームの下に隠れたように見えるので、 都合がいいのではないでしょうか? <追伸> オーバーラップ形式のフォームは魅力的だと思いますが、 アプリを開発中にはチャイルド形式またはポップアップ形式の方が、 デバッグし易いので良いですよ。 ある程度完成した段階で、初めてオーバーラップ形式にすることを、 お勧めいたします。 | |||
22661 | Re:開いているはずの表が”ない”と言われます | アックン | 2003/10/08-08:10 |
記事番号22653へのコメント 沼田さんに短い解説> フォーム呼び出しコマンドを使って出現するフォームのことをモーダルフォームと呼びます。 悲しげ大明神サマに横道> 実は前発言には、「あの悲しげさんでさえ、フォーム呼び出しオンリー=モーダルフォームオンリーってくらいです」 なんていったん書いたんだけど、勝手に書いちゃ悪いなと思って削ったんです。(^^; 「なぜか、小数派」ですか。これはちょっと以外でした。 つうことは、多くの人が苦労してるかも。うーん。 非モーダルは死にそうになるからやめた方がいいって言っていた、いかすぱげてぃさん、 姿見かけませんけど、どうしてるんでしょう。 次あたりで制御するイベントが搭載されるんでしょうか。 | |||
22678 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/08-16:26 |
記事番号22658へのコメント みなさん、こんにちは。 今回の問題に対しては多くの皆さんからのご教示をいただき、原因が明らかになっただけでなく、 いくつかの解決方法があることも分かりました。 しかし、その解決方法のどれがより適切なのかについては、パターン毎に試してみる、という作業が必要ではないかと感じています。 当然、それには時間もかかりますでしょうし、 それにこのスレッドも長くなりすぎた気もします。 いくつかの異なるテーマも含まれるようになってきていますので、 それぞれのテーマ毎に別のスレッドを立ち上げた方が良いのではないかとも思っています。 当面する問題は、対症療法的にしろ何とかクリア出来るようになりましたがので、 疑問に思っているいくつかのテーマを別スレッドでお尋ねしたいと思います。 | |||
22679 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/08-16:30 |
記事番号22658へのコメント みなさん、こんにちは。 今回の問題に対しては多くの皆さんからのご教示をいただき、原因が明らかになっただけでなく、いくつかの解決方法があることも分 かりました。 しかし、その解決方法のどれがより適切なのかについては、パターン毎に試してみる、という作業が必要ではないかと感じています。 当然、それには時間もかかりますでしょうし、 それにこのスレッドも長くなりすぎた気もします。 いくつかの異なるテーマも含まれるようになってきていますので、それぞれのテーマ毎に別のスレッドを立ち上げた方が良いのではな いかとも思っています。 この辺りで、ひとまず意見の交換を一時停止して、僕なりにいろいろと試してみたいと思います。 当面する問題は、対症療法的にしろ何とかクリア出来るようになりましたが、それでもまだいくつかの疑問は残っています。それらの 課題は改めて別スレッドでお尋ねしたいと思いますので、その際には、またよろしくお願いします。 | |||
22680 | Re:開いているはずの表が”ない”と言われます | 沼田 | 2003/10/08-17:02 |
記事番号22678へのコメント 失礼しました。投稿ミスです。 |