過去の桐井戸端BBS (桐ver.9) |
19312 | サブフォームで「変数読み込み」と「変数書き出し」をすると変数が無効になってしまう | 斉藤 勇介 | 2003/03/12-16:59 |
Ver.9です フォームを作成します。サブフォームとして使用します。 名札 メイン 変数宣言 共通,文字列{&名簿1,&名簿2,&名簿3,&名簿4,&名簿5} 条件 (#FSIZE("c:\K3\Data\Meibo.var")>0) 変数読み込み "Meibo.var" * としてフォームを開くときに変数を読込みます。 また 手続き定義開始 変数書き出し() 変数書き出し "Meibo.var",{ &名簿1,&名簿2,&名簿3,&名簿4,&名簿5} 手続き定義終了 として、取得した変数をファイルに書き出します。 単独での動作に問題はありません、が メインフォーム上に、サブフォームとして表示させると、 「変数読み込み」「変数書き出し」いずれも無効になってしまいます。 変数が収納されていることを確認して動作させるのに、 変数の値が希望のテキストボックスに表示されません。 (再度、サブフォーム単独で表示させると問題なく値が表示されています) また「変数書き出し」動作をすると、ファイルサイズが0になるので、 書き出し自体は行われているのでしょう。 どなたか解決方法をご存じないでしょうか。 | |||
19314 | 同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | ONnoji | 2003/03/12-18:27 |
記事番号19312へのコメント 斉藤 勇介さん、こんにちは。 少しだけ試してみましたが… 当方で固有変数で &名簿1 を宣言した後に、 変数読込を行った場合ですが、共通変数の &名簿1 は読みこまれませんでした。 よく確かめていませんが、保存したデータの値は固有変数の値のようでした。 ということで、&名簿1,&名簿2,&名簿3,&名簿4,&名簿5 と同じ名前の固有変数、局所変数、 自動変数が宣言されていないでしょか? 同名変数を解消すれば解決するかもしれません。 外していたら、すいません。 | |||
19316 | Re:同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | 斉藤 勇介 | 2003/03/12-20:11 |
記事番号19314へのコメント 検討課題ありがとうございました。 後からの変数宣言が、前のものを上書きするということですね。 念のため確かめましたが、同じ変数名での上書きはありませんでした。 一つの方法としてメインフォームの .kevで変数を読込む処理を記入して 変数管理で確かめたところ、キチンと変数値が読込まれています。 つまり共通変数の値がサブフォームのテキストボックス(ソース値として その変数が記入されています)に反映されないわけです・・・ そして、サブフォームを単独で開くとやはり問題なく値が代入されています。 | |||
19317 | Re:サブフォームでの「変数読み込み」と「変数書き出し」 | 悲しげ | 2003/03/12-20:36 |
記事番号19312へのコメント どもっ、斉藤さん 類似のものを試してみましたが、当方では全くノープロブレムです。 つまり、サブ相当フォーム単独オープンでも、メイン&サブのメインフォームから オープンした場合でも、どちらも変数値はキチンと表示されます。 >名札 メイン > 変数宣言 共通,文字列{&名簿1,&名簿2,&名簿3,&名簿4,&名簿5} > 条件 (#FSIZE("c:\K3\Data\Meibo.var")>0) 変数読み込み "Meibo.var" >* 原因に関係するのか否かは不明ですが、上記の記述は少し変です。 なぜなら、変数読み込みするのなら、変数宣言はそもそも不要だからです。 この辺り、varファイルが存在しない場合にのみ変数宣言するように 書き換えた方がいいと思います、念のため。 if(#FSIZE("c:\K3\Data\Meibo.var")>0) 変数読み込み "Meibo.var" else 変数宣言 共通,文字列{&名簿1,&名簿2,&名簿3,&名簿4,&名簿5} end 多分変わり無いような気もしますが(^^;)、これで一寸試してみて下さい。 あと、疑問が2点。 ひとつは、「変数書き出し」手続きはどのタイミングで実行しているのか? もうひとつ、次の文意が全然理解できません。(^^;) >また「変数書き出し」動作をすると、ファイルサイズが0になるので、書き >出し自体は行われているのでしょう。 | |||
19318 | Re:同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | ONnoji | 2003/03/12-20:43 |
記事番号19316へのコメント 斉藤 勇介さん、こんばんは。 私は、同じ種別(有効範囲)で同じデータ型で変数を上書きすることを申し上げたのではありません。 例えば… 固有変数 &名簿1 共通変数 &名簿1 このように、同名の変数も別の有効範囲ならば、同じタイミングに存在できます。 この場合には、固有変数が参照されて、共通変数は参照されません。 ですから… 共通変数以外の変数、つまり固有変数とフォームの局所変数を調べてみて、 同じ時点で同じ名前の変数がないか確かめる必要がありますという意味であります。(^^ゞ それでは。(@^^)/~~~ | |||
19319 | Re:サブフォームでの「変数読み込み」と「変数書き出し」 | うにん | 2003/03/12-20:44 |
記事番号19317へのコメント >もうひとつ、次の文意が全然理解できません。(^^;) > >>また「変数書き出し」動作をすると、ファイルサイズが0になるので、書き >>出し自体は行われているのでしょう。 これはですねえ、たぶんExplorerの詳細形式でそのファイルを見ているのですね。 既存のファイルに上書きすると、一時的に0と表示が変わるのです。 | |||
19320 | Re:同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | 斉藤 勇介 | 2003/03/12-20:57 |
記事番号19318へのコメント 詳しい説明ありがとうございました。 私はVer5で一括を作成していました。といっても、少ない知識と根性で、 とにかく結果を出すといった方法で何とかしてきました(2000行くらいの一括を書いていました)。 その際には変数の種別など、気にも留めていませんでした。 Windowsからの新たなイベントという作法は、一週間ほど前から 桐のイベント道場などでお勉強しながらチャレンジしているところです。 ONnojiさんの説明でイベントになると変数の違いにキチンと気をつけなければいけないのだなと、 思っているところです。 それと今回の同名の問題ですが、同じ名前の変数は他では使用していません。 つまり、同名の変数を 共通、固有、局所、自動 で使い分ける知恵を身につけていないというわけです。 しかしアドバイスは今後役に立つと、うれしく思います。ありがとうございました。 | |||
19324 | Re:サブフォームでの「変数読み込み」と「変数書き出し」 | 斉藤 勇介 | 2003/03/12-21:18 |
記事番号19319へのコメント 「かなしげ」さん「うにん」さん、お返事ありがとうございます。 とりあえず、お二方を悩ませた部分について書きます。 まず、言葉足らずで申し訳ありませんでした。 「Explorerの詳細形式でそのファイルを見ている」のは、正解です。 ただし、最新の情報に更新して見ます。 それと書きませんでしたが、ご承知のとおり書出したファイルは テキスト形式なので簡単に中を見ることができます。で、見てます。 その結果、もともと存在した内容が、変数書き出しをすると なくなっているというわけです (?_?) うー 悲しい。 | |||
19326 | Re:同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | ONnoji | 2003/03/12-21:35 |
記事番号19320へのコメント 斉藤 勇介さん、こんばんは。 最初の投稿の文章で気になったのですが… >メインフォーム上に、サブフォームとして表示させると、「変数読み込み」 >「変数書き出し」いずれも無効になってしまいます。 これはコマンドボタンが使用不可表示になるという意味ですか? それとも、実行しても… 変数を保存したり、読み込んだりできないようだという意味でしょうか? >それと今回の同名の問題ですが、同じ名前の変数は他では使用していません。 >つまり、同名の変数を 共通、固有、局所、自動 で使い分ける知恵を身につけていないというわけです。 老婆心ながら…(^^ゞ おそらく桐ver.9の[ツール]の[変数管理]で確かめられていると思いますが、 もしも、[変数管理]を使っていない場合には、[変数管理]で確かめて見てください。 なお、訂正モード等ではテキストボックスの変数値は常に更新されるわけではありませんので、 ※表示モードにすると必ず表示されます。 メソッド呼び出し @フォーム.変数変更( ) ※なお、"フォーム"は半角カタカナです。掲示板では全角カタカナに変換されてしまいます。 を使ってみたらいかがでしょう? もちろん変数が本当に読み込まれていることが前提です。(^^ゞ 今回も外している予感がします。それでは…(@^^)/~~~ | |||
19332 | Re:サブフォームでの「変数読み込み」と「変数書き出し」 | 斉藤 勇介 | 2003/03/12-22:01 |
記事番号19317へのコメント お返事ありがとうございます。 まず、悲しげさんが同様の処理で確かめてくださった結果、問題がないということで半分安心しました。 それは、「できる」ということが分かったからです。 安心できない部分は、当然原因が分からないということです。 変数宣言の方法につきましては、面倒くさいからやっている、不精者の方法です。 どうせ、ファイルを読込めば一緒だからということで、一括を書いている際によく使っている手順です。 でも、悲しげさんの書いてくださった方法が理想的だと思います。 しっかりとパクらせていただきたいと思います。ありがとうございます。 ***** 少し、細かく書きます。 私はV5で一括を書いていました。周りに桐の一括ができる人間がいないため 孤軍奮闘で、少ない知識と、根性だけで何とかしてきました。 そして最近、V5の一括をV9に移植しました。あくまでも、一括だけです。 (合計で2,000行位あるもので、とにかく移植を優先させました)。 1週間ほど前に、なんとか落ち着いたもので、イベントのお勉強のつもりで、 銀行振替用データの作成(全銀フォーマット)をしようとしています。 それ自体は、データに必要なヘッダを追加して、印字コマンドで固定長ファイルを作成すればよいというものなのですが、 問題なのは、それ以前のデータを一まとめにする処理です。 複数の部門の集金データを一まとめにする必要があるのです (年度末には部門数×2 のフォルダのデータをひとまとめにします)。 方法としては 必要な数のテキストボックスを並べておきます(入力支援でファイル名を選択させます) またその右側にテキストボックスの数だけ コマンドボタンを作っておきます。 (コマンドボタンは、ファミリでひとまとめにしています) ファイル名を入力させた後、その右側のボタンを押すと、統合するTBLに、 指定したファイルの必要な項目を併合するというわけです。 ファイル名は1年間は変更しないので、1度選択させたら次からは規定値として 表示させたいというわけです。 チョッと細かく書きましたが、じつは「変数書き出し」手続き のタイミングは、 この同じボタンで実行しています(ファミリではなく、コマンドボタン一つ一つに、 機能名 手続き実行 機能パラメータ 変数書き出し としています) この一つのボタンに、複数の機能を同時に持たせるのが正しいかどうか、 方法として間違いがないかどうか、実はまったく分かりません。 変数の書き出し処理は、「過去の桐井戸端BBS」で 悲しげさんが記入されていたものを利用しました。 桐のヘルプなどを見ても、書き出し方法が分からないのです。 メインフォームにサブフォームを表示させて切り替える方法は、 「桐のイベント道場」§8 変数によってサブフォームを変更する を ほとんどソックリ利用させてもらっています。 お勉強はまず物真似から、というわけです。 物真似するだけなら良いのでしょうが、行き当たりばったりで試行錯誤している というのが、いまの状態です。わけのわからないとんでもないことをしているやもしれません。 とにかく、できると言う事を前提に、いろいろと試していきます。 ご迷惑でしょうが、今後ともよろしくお願いします m(__)m | |||
19335 | Re:同じ名前の固有変数、局所変数、自動変数が宣言されていないでしょか? | 斉藤 勇介 | 2003/03/12-22:32 |
記事番号19326へのコメント ONnojiさん 何度もありがとうございます。 >最初の投稿の文章で気になったのですが… >>メインフォーム上に、サブフォームとして表示させると、「変数読み込み」 >>「変数書き出し」いずれも無効になってしまいます。 > >これはコマンドボタンが使用不可表示になるという意味ですか? >それとも、実行しても… >変数を保存したり、読み込んだりできないようだという意味でしょうか? コマンドボタンが無効ではなさそうです。 変数の読み込みは、.kev で 名札 メイン で処理しています。 変数書き出しは、コマンドボタンを押すと、内容がクリアされるので機能はしているでしょう。 (サブフォームに表示させるフォーム単独だと、問題ないので そこでまず変数書き出しをしておきます。ファイルは中を見て変数・値等が書出されていることをかめます。) [変数管理]は、使ってはいるのですが、問題意識がないと「ああ、そうか」で終わってしまいます。 先ほど、問題意識をもって[変数管理]を見てみました。 すると、 メインフォームを定義で開いて、[変数管理]を見ると、指定している局所変数が3個ほど並んでいます。 なんら問題ありません。 次に、 メインフォームを普通に開いて[変数管理]を見ると、局所変数として指定していない変数 (今回の処理で使用する変数全て?) が、局所変数の一覧に表示されています。 となると、前回記入していただいた、同名の局所変数で、せっかく読込んだ共通変数をクリアしていると 言うわけになりそうです。 さて、対策を考えなくては・・・ | |||
19336 | 局所変数に代入することで解決しました | 斉藤 勇介 | 2003/03/12-22:56 |
記事番号19335へのコメント ONnojiさん とりあえず解決しました。ありがとうございました。 変数宣言 共通,文字列{&名1,&名2,&名3,&名4,&名5} 変数宣言 局所,文字列{&名簿1,&名簿2,&名簿3,&名簿4,&名簿5} 条件 (#FSIZE("c:\K3\Mitsui\Meibo.var")>0) 変数読み込み "Meibo.var" 代入 &名簿1=&名1,&名簿2=&名2,&名簿3=&名3,&名簿4=&名4,&名簿5=&名5 と、読込んだ共通変数を、局所変数に代入することで解決しました。 書き出す際には、局所変数を共通変数に代入して、共通変数を書き出します。 共通、固有、局所、自動、といった変数の使い分けをキチンとしないと、うまく行かないという 見本ですね。 V5の一括では、ここまで意識する必要はありませんでした。 これも、Windows桐の新たな作法というわけなのでしょう。 それでは、今後ともよろしくおねがいします。感謝! | |||
19337 | 局所変数に代入することで解決しました | 斉藤です | 2003/03/12-23:06 |
記事番号19332へのコメント 悲しげさん とりあえず解決しました。ありがとうございました。 メインフォームでは、サブフォーム上に表示するフォームの変数が 局所変数として表示される(しかも、値が未定義になる)のが原因でした。 変数宣言 共通,文字列{&名1,&名2,&名3,&名4,&名5} 変数宣言 局所,文字列{&名簿1,&名簿2,&名簿3,&名簿4,&名簿5} 条件 (#FSIZE("c:\K3\Mitsui\Meibo.var")>0) 変数読み込み "Meibo.var" 代入 &名簿1=&名1,&名簿2=&名2,&名簿3=&名3,&名簿4=&名4,&名簿5=&名5 と、読込んだ共通変数を、局所変数に代入することで解決しました。 書き出す際には、局所変数を共通変数に代入して、共通変数を書き出します。 共通、固有、局所、自動、といった変数の使い分けをキチンとしないと、うまく行かないという見本ですね。 V5の一括では、ここまで意識する必要はありませんでした。 これも、Windows桐の新たな作法というわけなのでしょう。 皆さんのおかげで何とかなりました。ありがとうございます。 また、他の手立てがあれば、お教えください。 (桐の場合、方法が1つでないのは良くあることです) | |||
19340 | Re:局所変数に代入することで解決しました | 悲しげ | 2003/03/13-00:03 |
記事番号19337へのコメント どもっ、斉藤ですさん う〜ん、何だか根本的なところで誤解しているように思えます。 あえて、あっちは共通変更、こっちは局所変数・・・というふうに 使い分ける必要は全くないように思えるのですが? 云い換えれば、局所変数をひとつも使わずに、メインもサブもvarファイルの読み書きも全て、 例えば共通変数なり固有変数に統一すれば、 ことはとっても簡単になるのではありませんか? (どうしても局所変数を使わざるを得ない理由があるのでなければ) * >共通、固有、局所、自動、といった変数の使い分けをキチンとしないと >うまく行かないという >V5の一括では、ここまで意識する必要はありませんでした。 >これも、Windows桐の新たな作法というわけなのでしょう。 この認識は私は逆でして、普通はさほどそのことを意識せずDOS桐と同様に扱うことが可能です。 Win桐ではさらに、その気になればこれらを細かく使い分けることも可能である、との認識です。 私が、これら変数、特に自動変数を使い分けることができるようになったのは(ONnojiさんとかのおかげです)、 V8が出て1年以上過ぎてからでした。 これはこれで便利なのですが、それまでは完璧にDOS桐と同じ感覚で変数を使って(使えて)いました。(^^;) | |||
19342 | Re:局所変数に代入することで解決しました | 斉藤です | 2003/03/13-00:49 |
記事番号19340へのコメント 悲しげさんへ ONnojiさん宛の返事(No.19335)に書きましたが、 あっちは共通変更、こっちは局所変数・・・というふうに使い分けているわけではないのです(-_-;) 勝手に局所変数として扱われてしまっているわけです。原因は不明です。 共通変数として扱っているつもりが・・・ (サブフォームの属性で、局所変数を有効にするのチェックを外したらどうなるだろうか・・・ イベント道場でパクらせていただいた状態で使用しているので、 いくつかの変更が必要になると思いますが・・・など確かめたいこともあります) そこで、仕方なく書き出しの際に共通変数に代入して(局所変数は書出しができません)、 読み込んだときには 局所変数に代入する対処をしたということです。 正直、何か別の手立てがあるのではという気もします。 特に、悲しげさんが試した結果、何も問題がないということを考えると、 何かあるのではと思いはします。 イベントに向き合ってまだ1週間です。早く暗中模索状態から抜け出したい と思っていますが・・・ V5には、局所や自動の変数などなかったのに・・・ 何度もありがとうございます。今後ともよろしくお願いします。 | |||
19343 | フォーム定義の状態で変数管理で局所変数を登録しているような | ONnoji | 2003/03/13-01:04 |
記事番号19342へのコメント 斉藤ですさん、こんばんは。 悲しげさん、横レスで失礼します。m(__)m >悲しげさんへ >ONnojiさん宛の返事(No.19335)に書きましたが、 >あっちは共通変更、こっちは局所変数・・・というふうに使い分けているわ >けではないのです(-_-;) >勝手に局所変数として扱われてしまっているわけです。原因は不明です。 >共通変数として扱っているつもりが・・・ メインフォームを作成したときに、 フォーム定義の状態で変数管理で局所変数を登録しているような… 一度、メインフォームを再定義して、 この状態で[変数管理]の[局所変数]を確かめて見たらいかがでしょうか? ひょっとして、登録したのを忘れているかもしれませんよ。 タラレバの話ですいません。(^^ゞ | |||
19348 | 変数管理で &this と &hwindow を境界にして調べて見るといいかもしれません。 | ONnoji | 2003/03/13-08:16 |
記事番号19343へのコメント 斉藤さん、おはようございます。 次の投稿記事からすると… >先ほど、問題意識をもって[変数管理]を見てみました。 >すると、 >メインフォームを定義で開いて、[変数管理]を見ると、指定している局所変数が3個ほど 並んでいます。 >なんら問題ありません。 >次に、 この内容からすると、フォーム定義説はハズレのようですね。(^^ゞ しかし、 >メインフォームを普通に開いて[変数管理]を見ると、局所変数として指定していない変数 >(今回の処理で使用する変数全て?) が、局所変数の一覧に表示されています。 局所変数のつもりで無いものが、局所変数に変身しているというのも不思議です。 それならば、これらの変数はもともと共通変数だったということなのでしょうか? しかし、手持ちのフォームで試して見ましたが、 錬金術のように共通変数が局所変数に化けてしまう現象は確認できませんでした。 変数を読み込むと錬金術できるのかは試していないので不明です。 万一の可能性がないとも言いきれませんが… 局所変数は、 (1)フォーム定義→[変数管理] (2)[名札 メイン]で局所変数の宣言文 の二通りの方法で作成可能です。 変数管理で局所変数を一覧したとき、 &this より上にある変数が、(1)フォーム定義→[変数管理]に由来する変数 &hwindow より下にある変数が、2)[名札 メイン]で局所変数の宣言文 に由来します。 ※(1)と(2)を併用して同名の局所変数を上書きした場合には、(1)フォーム定義→[変数管理]に由来する変数になります。 したがって、サブフォームを単独で開いて、変数管理で &this と &hwindow を境界にして調べて見るといいかもしれません。 >となると、前回記入していただいた、同名の局所変数で、せっかく読込んだ共通変数をクリアしていると >言うわけになりそうです。 クリアという表現は適当ではないと思います。 変数の有効範囲(スコープ)によって、 優先度の低い変数は存在するが、使えない…つまり隠されているという意味ですから、 決して上書きされているわけではありませんよ。 <蛇足> スコープの異なる同名の変数の有効範囲は以下のようになる。├──┤有効範囲を広さを表す。 ├─自動─┤この変数は宣言した手続き内でのみ有効です。手続きから抜けると、自動的に削除されます。 ├─局所────┤この変数は、ウィンドウ固有ものです。フォームウィンドウが閉じると、自動的に削除されます。 ├─固有───────┤この変数は、表またはフォームのウィンドウが開いているあいだだけ、有効です。 ├─共通───────────┤この変数は、桐で作業しているあいだは、つねに有効です。 自動と局所の変数は単純に自動削除されるが、固有の自動削除は少しややこしいです。 <固有変数の特殊性> この種別の変数が宣言できるのは、表ウィンドウ、フォームウィンドウが開いているあいだ、 または一括処理が実行されているあいだだけ有効です。 (1) 宣言した変数は、表ウィンドウとフォームウィンドウ、一括処理がすべて閉じると、自動的に削除されます。 (2) 宣言後、ウィンドウを新たに開かない限りは、任意に削除できます。 ただし、ウィンドウが開かれる前に宣言した変数は、すべてのウィンドウを閉じない限り、削除できません。 | |||
19352 | サブフォームの、オブジェクトの属性[局所変数を有効にする]のチェックを外すで解決しました。 | 斉藤です | 2003/03/13-09:38 |
記事番号19348へのコメント ONnojiさん 朝早くからありがとうございます。 昨日(日付は今日ですが)寝る前に気になったいたところを調べて(確かめて)見ました。 メインフォームに設定しているサブフォームを表示させる部分(要するにサブフォーム)の、 オブジェクトの属性で、[局所変数を有効にする]にチェックが入っている状態で 桐を一度閉じて、新たに立ち上げた後メインフォームをダブルクリックします。 つまり通常使用する状態でフォームを表示させたわけです。 以下メインフォームを立ち上げた画面の[変数管理]で確認しています。 サブフォームに表示させたフォームで登録している固有変数(いまは固有変数にしています)は 同じく固有変数に表示されます。値にはフルパスで指定されたファイルが表示されています (書出した変数の値を読み込んでいるのでしょう)。 つぎに、局所変数を見てみます。すると「錬金術のように固有変数が局所変数に化けてしまっているのです」。 困ったことに局所変数に表示されている変数には、値が代入されていないというわけです (メインフォームで指定している変数の値は代入されています)。 以上を見る限り、サブフォームのオブジェクトの属性で、[局所変数を有効にする]にチェックが入っていると、 サブフォームに表示させたフォームの変数が局所変数としても取り込まれるが、 その代入値は取り込まれないというわけです。 ~~ ちなみに、チェックを外すと問題が解決しました。 ついでですが &this と &hwindow というのがあるのですね。「桐のイベント道場」でパクらせてもらった現在利用しているメインフォームには &thisの値を利用して表示などを切り替えている構文があるのですが、 &thisが何か分からなくて そのまま利用しています (-_-;) >クリアという表現は適当ではないと思います。 私もそう思います。 蛇足もありがとうございます。とても参考になります。 またよろしくお願いします。 | |||
19353 | Re:サブフォームの、オブジェクトの属性[局所変数を有効にする]のチェックを外すで解決しました。 | 斉藤です | 2003/03/13-09:53 |
記事番号19352へのコメント 斉藤です 先ほどの記入で1箇所誤りがありました >サブフォームに表示させたフォームで登録している固有変数(いまは固有変数にしています)は同 >じく固有変数に表示されます。値にはフルパスで指定されたファイルが表示されています(書出し >た変数の値を読み込んでいるのでしょう)。 以上の部分は削除してください。うっかりメインフォームでも変数の読み込みの構文を書いていました。 後は同じです。 ということで、 サブフォームで局所変数を有効にする にしていると、サブフォームに表示させるフォーム上の変数が 局所変数として取り込まれてしまうというわけです。 それでは、訂正でした。 | |||
19354 | ONnojiさん、悲しげ さん、うにん さん 大変申し訳ございませんでした。深くお詫び申し上げます。 | 斉藤です | 2003/03/13-10:26 |
記事番号19353へのコメント ONnojiさん、悲しげ さん、うにん さん 大変ご迷惑をおかけいたしまして、申し訳ございませんでした。 深く深くお詫び申し上げます。 まず、恥ずかしいので、恥の上塗りで最初に言い訳をします。 今回の件で、自動、局所、固有、共通の変数の性質等について、重要な意識を持つことができました。 今後必要な意識であることに間違いがないことは言うまでもありません。 私としては、本当にうれしい助言をいただいたことをお礼申し上げます。 さて、全ての原因が解明しました。全て私のミスです。 実は、サブフォームに表示させるフォームを複数作成したのですが、 最初に作成したのが、今回問題にしているフォームです。 そのフォームを作成するときに、最初にファイルの場所を取り込む変数として、局所変数を登録しました。 そしてこのフォームを複写することで他のフォームを作成したのです。 ここまで書けばお分かりだと思いますが、他のフォームに局所変数が登録されたままになっていたということです。 今回話題にしたフォームは、局所変数ではダメ(変数の書出しができない)ということから始まり、 いろいろと変更していったわけです。 他のフォームは、テキストボックスや、コマンドボタンの削除や変更をしていって、 もともと登録した局所変数はまったく使用しない状態になったいたのですが、 フォームに登録した局所変数はそのままになっていたというわけです。 この局所変数が、 メインフォームのサブフォームの属性で、局所変数を有効にするのチェックが入っていることで、 メインフォームに取り込まれていたわけです。 今回の件で、お知恵を拝借させていただいた方には、 意外な結末で、大変申し訳ございませんでした。これに懲りずに、こんごともよろしくお願い致します。 本当にすいませんでした。 斉藤でした。 | |||
19355 | 原因がハッキリして良かったですね。v(^^)v | ONnoji | 2003/03/13-11:38 |
記事番号19354へのコメント 斉藤さん、こんにちは。 原因がハッキリして良かったですね。v(^^)v 短気を起こさずに、じっくり検討されるお姿に頭がさがります。 早々に見当違いの結論を出さないで済んだのはラッキーでしたね。 それでは。…(@^^)/~~~ <蛇足> >今回話題にしたフォームは、局所変数ではダメ(変数の書出しができない)ということから始まり、いろい >ろと変更していったわけです。 ご参考までに…(INIもどきのこと)。 確かに[変数書き出し][変数読み込み]コマンドでは局所変数を保存したり読み込んだりできませんが、 [印字]コマンドでテキストファイルに文字を書き出して[変数書き出し]の代用ができます。 (例) &output = #一括パス名 + &INFmMyWfmName + "_info" 印字開始 &output 印字 "ID,0," + &INFmMyWfmName 印字 "Date,0," + #年月日 印字 "Time,0," + #時刻 印字 "INFmMyWinPos,1," + #str( &INFmMyWinPos[1] ) 印字 "INFmMyWinPos,2," + #str( &INFmMyWinPos[2] ) 印字 "INFmMyWinSize,1," + #str( &INFmMyWinSize[1] ) 印字 "INFmMyWinSize,2," + #str( &INFmMyWinSize[2] ) 印字 "INFmMyWinMaximize,0," + #str( &INFmMyWinMaximize ) 印字 "INFmMyWinMinimize,0," + #str( &INFmMyWinMinimize ) 印字 "EZWmMagnification,0," + #str( &EZWmMagnification ) 印字終了 また、書き出したテキストファイルの内容を[ファイル入力]コマンドで1行毎読み込んで、 局所変数に代入することができます。 (例) 変数宣言 自動,整数 { &status, &dim } 変数宣言 自動,数値 { &val, &returnNum } 変数宣言 自動,文字列{ &varname, &txt, &line, &returnStr, &msg } 定数宣言 自動,文字列{ &WQ = """" } 変数宣言 自動,数値 { &ID, &Date, &Time } /* 読み込み ダミー変数 */ &txt = #一括パス名 + &INFmMyWfmName + "_info.txt" ファイル入力開始 &txt, 終了状態 = &status ┌繰り返し ( &status = 1 ) │ ファイル入力 &line,行,終了状態=&status │ &varname = #対応文字列( &line,1) │ &dim = #num( #対応文字列( &line,2) ) │┌if ( #文字位置( #対応文字列( &line,3), &WQ ) <> 0 ) ││ &line = #対応文字列( &line,3) ││ &line = #文字置換( &line, &WQ, #u ) ││ &returnStr = #setVAR( &varname , &dim , &line ) │├else ││ &val = #num( #対応文字列( &line,3) ) ││ &returnNum = #setVAR( &varname , &dim , &val ) │└end └繰り返し終了 ファイル入力終了 人それぞれの好みによりますが、私( ONnoji )の場合は局所変数を多用しています。(^^ゞ | |||
19356 | Re:ONnojiさん、悲しげ さん、うにん さん 大変申し訳ございませんでした。深くお詫び申し上げます。 | 悲しげ | 2003/03/13-11:48 |
記事番号19354へのコメント どもっ、斉藤ですさん、話が殆ど見えました。(^^) 一点だけコメントします。(実は下記の点も含めて既に解決済みなのかもしれませんが念のため) >メインフォームのサブフォームの属性で、局所変数を有効にする >のチェックが入っていること を繰り返し問題にされていますが、ここはあまり問題にならないと 思います。主要な問題は >そのフォームを作成するときに、最初にファイルの場所を取り込 >む変数として、局所変数を登録しました。 の部分にあるのですから、(その後も引き続きフォーム上で定義した局所変数を敢えて 利用したいのでなければ)フォーム再定義画面上で、 変数管理を開いて、この(余計な?) 局所変数をバッサリ削除してしまったらいいのではありませんか? これが最も簡単。 ※ONnojiさんは局所変数が好きみたいだから、このように云うのは 少々ハバカリがあるけど・・・・。(^^;) * 余談。 局所変数は(kevで宣言する場合の他に)、フォーム定義上で変数管理を開いて 登録した後は、登録した変数値を含めて、何と云うか一種「フォーム埋め込み」のような扱いになることは、 V8当初は私には全然判りませんでした。 長らく不思議でして、ある時いか様に質問してようやくその仕組みが判りました。 この辺り、確かに判りにくいですよね。 もうひとつ、同名変数の優先順。Win桐の場合は、変数の種別が異なれば 同名の変数であっても支障ないのみならず、「相互不干渉」でもあること。 これは慣れればなかなか便利ですが、慣れないと(あるいは知らないと)しばしば泥沼ですね。 ちなみに、以下の文言はV8のヘルプにはあるけど V9のでは見つけることができませんでしたが、一応挙げておきます。 -------------------------------------------------------------- 各種別で同じ名前の変数を宣言した場合、次の順番で検索され、 最初に見つかった変数の値が参照されます。 自動 局所 固有 共通 -------------------------------------------------------------- | |||
19358 | はい、ありがとうございます | 斉藤です | 2003/03/13-13:54 |
記事番号19355へのコメント ONnojiさん どうもありがとうございました。 私の周りには、桐を使っている人間がいないもので、このサイトで皆さんといろんな意見交換ができることを、 大変ありがたく思います (今は、教えてもらうばかりなのでしょうが、そのうち皆さんに恩返しできるようになりたいですね)。 「蛇足」は、とてもありがたいことです。小さなノウハウを積み重ねることも、重要な側面だと理解しています。 有効に使わせていただきたいと思います。 「悲しげ」さんによると、「ONnojiさん」は変数の種別を非常によく分かっていらっしゃる様子ですね。 私は、感覚的には「悲しげ」さんに近いと思いますが、 理解したうえで、どのように使うかという議論ができるわけです。はやく皆さんの議論についていけるようになりたいと思っています。 感謝です。 | |||
19359 | 大変お騒がせしました | 斉藤です | 2003/03/13-14:09 |
記事番号19356へのコメント 悲しげさん いろいろとありがとうございました。 フォームを使おうとしたときに、最初に思ったことが「見通しが悪い」と言うことです。 表の定義画面でしたら、各項目の定義情報が一覧できます(ホンとかな?) が、フォームはマウスでいろんなところをクリックしないといけません。 後で見たときに、何を埋め込んだか分かりにくいと思ったわけです。 また局所変数をフォームに登録したことが、今回の最大の原因でしょう (それ以前の問題は、私がよく分かってないことですが)。 同じ局所変数を登録するのでも、Kevで登録すれば、もっと見通しが良くなるのでしょう。 余談、ありがとうございます。このような情報に、 桐の本質が見え隠れすると思っています。 それでは、またよろしくお願いします。 | |||
19367 | 定義情報の一覧@フォーム | 悲しげ | 2003/03/13-18:39 |
記事番号19359へのコメント どもっ、斉藤ですさん >表の定義画面でしたら、各項目の定義情報が一覧できます(ホンとかな?) >が、フォームはマウスでいろんなところをクリックしないといけません。 実は、フォーム定義の画面で、上部メニューバーから 「ファイル」/「定義情報の印刷」を指定すると(印刷またはプレビューで)定義情報の全てを一覧することができます。 ただし、あまりにも膨大に過ぎて、とても見る気にもなれませんけど。(^^;) と云う訳で、あまり意味のないコメントですいません。 | |||
19374 | どんな情報でもありがたいです | 斉藤です | 2003/03/13-22:20 |
記事番号19367へのコメント 悲しげさん へ どのような情報でも貴重なものです。 今プレビューを見てみましたが、なるほど、見るきにはなれませんね。 データベースにして、絞込みができるなどしてもらわないと、 単に「できる」というだけの機能でしかないということになりかねませんね。 |