HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

■14023 / 親記事)  変数を反映させたい
  
□投稿者/ てつか -(2023/11/01(Wed) 14:48:21)
    KEVで作った共通変数をcmdに反映させたい。引き渡したいのですが
    どうすれば良いのか教えてください。win10,桐10です。
引用返信 [メール受信/ON] 削除キー/
■14024 / ResNo.1)  Re[1]: 変数を反映させたい
□投稿者/ ONnoji -(2023/11/01(Wed) 15:09:12)
    2023/11/01(Wed) 15:33:05 編集(投稿者)

    > KEVで作った共通変数をcmdに反映させたい。引き渡したいのですが

    実に難解な内容ですね。(^^ゞ
    ひょっとして、
    イベント処理(.kev/.kex)のどこかで、変数宣言した共通変数が存在している時に、
    その後に実行する一括処理(.cmd/.cmx)で同名同種の変数を[変数宣言]コマンドで上書きすると困るという意味でしょうか?

    もしも、すでに存在する変数を[変数宣言]コマンドで上書きしたくないのであれば、

    × 変数宣言 共通,文字列{ &variableName }

    〇 条件 ( #配列要素数( "variableName" ) = -1 ) 変数宣言 共通,文字列{ &variableName }

    という具合に、#配列要素数 という関数の戻り値を調べるとよろしいと思いますけれど・・・

    詳しくは、桐 - ヘルプ > データと式 > 関数 > 変数操作 > #配列要素数 を見てね。

    p.s.

    老婆心ながら、[変数を上書きしない]という行為は、[変数を引き渡す]とは呼びませんのでご注意ください。

    共通変数ならば、イベント処理(.kev/.kex)と一括処理(.cmd/.cmx)のどちらからでも参照できます。
    ただし[変数宣言]コマンドで上書きしてしまうと内容は初期化されます。
    なので、上書きを回避するようにしますが、これは決して[引き渡し]とは言いませんよ。
    これは単に[上書きせずに参照]するですよ。

引用返信 [メール受信/OFF] 削除キー/
■14027 / ResNo.2)  Re[2]: 変数を反映させたい
□投稿者/ てつか -(2023/11/02(Thu) 13:53:38)
    No14024に返信(ONnojiさんの記事)
    > 2023/11/01(Wed) 15:33:05 編集(投稿者)
    >
    kevで頭初に宣言した共通変数です。wfxでその変数に取得した値をそっくりそのままcmxに反映させたいとの趣旨です。
    具体的には平成35年10月を&指定年=35,&指定月=10、とwfxで取得し、
    cmxの「年月」 {&指定年*100+&指定月}にしたい。「年月=3510としたい。
    「変数宣言コマンドで上書きすると困る」との意ではありません。
    よろしくお願いいたします。
引用返信 [メール受信/OFF] 削除キー/
■14028 / ResNo.3)  Re[3]: 変数を反映させたい
□投稿者/ ONnoji -(2023/11/02(Thu) 20:57:58)
    2023/11/03(Fri) 16:01:01 編集(投稿者)
    2023/11/02(Thu) 21:13:54 編集(投稿者)

    > 「変数宣言コマンドで上書きすると困る」との意ではありません。

    了解です。(^^ゞ

    > kevで頭初に宣言した共通変数です。
    > wfxでその変数に取得した値をそっくりそのままcmxに反映させたいとの趣旨です。

    貴殿は桐10だそうですから、イベント処理ファイルの拡張子は.kex ですよね。
    確認しますが、貴殿がkevと称している物はイベント処理ファイルの事でよろしいですね。
    同様にwfxと称している物はフォームの事でよろしいですね。

    > 具体的には平成35年10月を&指定年=35,&指定月=10、とwfxで取得し、
    > cmxの「年月」 {&指定年*100+&指定月}にしたい。「年月=3510としたい。

    &指定年 の値が 35
    &指定月 の値が 10

    である時、

    &年月 = &指定年 * 100 + &指定月

    とすれば、 &年月 の値は 35 * 100 + 10 であるから、3510 となるハズ。

    ただし、&指定年・&指定月・&年月の各変数のデータ型は、(長)整数または数値(通貨)である。

    ここまではOKでしょうか?

    データ型が文字列になっているなんてことはありませんか? ※エラーが表示されるはずです

    と、最初の一歩を書きましたが、単純にデータ型の問題ならば簡単に解決します。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    しかし、データ型が(長)整数または数値(通貨)の場合に、

    &年月 = &指定年 * 100 + &指定月

    の結果が、3510 にならずに別の値になるということでしょうか?? ※値が空っぽの場合を含みます

    おそらく、フォーム(.wfx)に2つのテキストボックス(仮称:txt指定年 と 仮称:txt指定月)が配置されていて、

    それぞれのテキストボックスの[ソース]が、&指定年 と &指定月 なんでしょうね。

    ここで問題になるのは、&年月 = &指定年 * 100 + &指定月 を計算するタイミングですが、

    仮称:txt指定年 と txt指定月 のテキストボックスのどちらかにキャレット(縦棒の入力カーソル)が表示されているタイミングではありませんか??

    何を言いたいかというと、テキストボックスに数字が見えていても、入力を確定していないと、値が変数に反映されないということです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    この場合、コマンドボタンで確定する方法が一番簡単です。
    以下に拙作webより引用します。

      【引用】13 コマンドボタンでプロシージャを実行する|桐の釣魚大全のトップ > フォームアプリケーション教書 第1部

       ■表示モードに遷移してからプロシージャを実行する
       プロシージャ内で実行するコマンド・メソッドは、表示モードでしか実行できないものが多いです。
      そのために、呼び出したプロシージャ内で、[更新モード設定]メソッドで表示モードにすることも出来ますが、
      次のように[機能名:表示]を加えることで、簡単に表示モードに遷移出来ます。

      ┌─────────────────────────────────────────────┐
      │オブジェクト名: cmdプロシージャを実行する                        │
      │標題     :プロシージャを実行する                          │
      │                                             │
      │ 機能名      機能パラメータリスト                         │
      │1 表示                                          │
      │2 手続き実行    プロシージャ名,引数1,引数2,… ,引数n             │
      │3 なし                                          │
      │4 なし                                          │
      └─────────────────────────────────────────────┘

    ※ [機能名2]の[手続き実行]は、[開く]で一括処理(.cmx)を実行するとしてもOKです。

    ※なお、私( ONnoji )は、[開く]で一括処理(.cmx)を実行することは絶対にお勧めしませんが、
    ※プログラムの作り方は自由なので、とやかくとは申しませんけれど・・・
    ※ 2.2 フォーム+履歴を改変した一括処理
    ※ http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section2-2

    と、以上のようにテキストボックスの入力値が[確定]されていない状態で計算をしている可能性を指摘したいと思います。

    なお、テキストボックスの入力値を[確定]させるには、
     ・F4キーを押して表示モードに遷移する(コマンドボタンの機能名[表示]と同じ効果があります) 
     ・tabキーを押して別のオブジェクトへフォーカスを移動する
    でも出来ますよ。

    p.s.

    > 具体的には平成35年10月を&指定年=35,&指定月=10、とwfxで取得し、
    > cmxの「年月」 {&指定年*100+&指定月}にしたい。「年月=3510としたい。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
       ↑
    とにかくこの調子では誰にも理解できませんよ。

    この説明ならば、[代入]コマンドで
     代入 &年月 = &指定年 * 100 + &指定月
    または単に
      &年月 = &指定年 * 100 + &指定月 ※[代入]コマンドは省略できます
    を実行すればという回答になります。

    他人に判るように説明するのは難しいですが、質問する時のコツは、

    1.まず、具体的に何々をどのようにして
    2.実行したら、期待した結果と違う
    3.結果がどのように違うかを具体的に示す 値が空っぽ、エラーが表示される、etc.

    このように具体的に書いてもらわないと、謎解きゲームをしているようになってしまいますよ。


引用返信 [メール受信/OFF] 削除キー/
■14030 / ResNo.4)  Re[4]: 変数を反映させたい
□投稿者/ てつか -(2023/11/03(Fri) 10:04:32)
    No14028に返信(ONnojiさんの記事)

    kexです。
    &指定年・&指定月は両方とも整数です。&年月は使っていません。
    データtbxの項目「年月」をcmxで絞り込みたい。
    絞り込み「年月」{&指定年*100+&指定月}、「年月」=3510としたい。
    結果は共通変数で取得できたと思った&指定年=35,&指定月=10が
    cmxに反映されなくて絞り込みとならなかった。
    コマンドボタンで表示モードにしては?
    「開く」でcmxを実行する。
    上記は、当方にとって理解するのは難しいので

    文面にありました「代入」コマンドを使ってみようと思います。

    >
引用返信 [メール受信/ON] 削除キー/
■14031 / ResNo.5)  Re[5]: 変数を反映させたい
□投稿者/ ONnoji -(2023/11/03(Fri) 10:23:28)
    2023/11/04(Sat) 10:45:56 編集(投稿者)
    2023/11/03(Fri) 12:21:54 編集(投稿者)

    > データtbxの項目「年月」をcmxで絞り込みたい。
    > 絞り込み「年月」{&指定年*100+&指定月}、「年月」=3510としたい。
    > 結果は共通変数で取得できたと思った&指定年=35,&指定月=10が
    > cmxに反映されなくて絞り込みとならなかった。

    絞り込み「年月」{&指定年*100+&指定月}
     ↑
    なぁ〜んだ絞り込みが出来ないという話でしたか!?

    > cmxの「年月」 {&指定年*100+&指定月}にしたい。「年月=3510としたい。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
       ↑
    とにかくこの説明では[絞り込み]コマンドのことだとは誰も思いませんよ。

    なんで波括弧{ }が書いてあるんだろうとか???、と不思議に思いましたし、
    「年月」が項目名の[年月]だったとも・・・思いもしませんでした。
    結局実行した[コマンド]名も書いていないし、絞り込みという文言も書いていないので誰にも伝わりませんよ。

    ということでようやく理解しました。

     絞り込み [年月]{ &指定年 * 100 + &指定月 }
     ・・・・・・・・・・・・・・・・・・・・・・
      ↑
    これが失敗するということですね。

    それを早く言ってほしかったなぁ〜〜〜〜〜〜 (ーー;)--------------> ※遠い目線

    この時、一括処理(.cmx)で[絞り込み]コマンドを実行する直前に、&指定年 と &指定月 のそれぞれの値を調べましたか????
                ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
     確認 #str( &指定年 )
     確認 #str( &指定月 )
     確認 #str( &指定年 * 100 + &指定月 )
     絞り込み [年月]{ &指定年 * 100 + &指定月 }

    こんな感じ。

    > cmxに反映されなくて絞り込みとならなかった。

    [反映されていない]とは、思った通り値になっていないという意味だったようですね。

    ちなみに、[反映]という言葉は(フォームの表示上の事などの)別の事柄を想起してしまいますのでお止めください。

    まず、論より証拠、確認コマンドで変数の値を確かめてください。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    p.s.

    余談ながら、共通変数と同じ名前の固有変数があると固有変数が参照されますよ。

    例えば、共通変数:&指定年 と 固有変数:&指定年 の同名の二つの変数が同時に存在した時には、
                             ・・・・・・・・・・・・・・・・・
    &指定年 の値は常に固有変数:&指定年 になり、共通変数:&指定年 の値は隠されて参照できません。

    老婆心ながら・・・(^^ゞ

引用返信 [メール受信/OFF] 削除キー/
■14032 / ResNo.6)  (削除)
□投稿者/ -(2023/11/03(Fri) 13:05:48)
    この記事は(投稿者)削除されました
引用返信 [メール受信/OFF] 削除キー/
■14037 / ResNo.7)  Re[1]: 変数を反映させたい
□投稿者/ natsu -(2023/11/04(Sat) 08:31:37)
    確認ですが、フォームのテキストオブジェクトのソースがKEVで宣言した共通変数で、そのテキストオブジェクトに目的のデータを入力してるにも関わらずCMD側に引き渡されていないということですか?

    もしそうであれば、メソッドのソース値取得(個人的には面倒くさいので再描画、描画更新で片付けていた記憶が…)のヘルプを参照してみてください。
引用返信 [メール受信/OFF] 削除キー/
■14038 / ResNo.8)  Re[6]: 変数を反映させたい
□投稿者/ てつか -(2023/11/08(Wed) 09:59:48)
    No14031に返信(ONnojiさんの記事)

    (ONnojiさん、まさやんさん、natsuさん
    教えていただきましてありがとうございました。
    &指定年、&指定月、をア kexで共通変数と宣言していた。
    イ cmxで@共通変数と宣言してみた A固有変数と宣言してみた
         B宣言しなかった
    いくつか試してみた結果、アとB の組み合わせで望む結果となりました。
    原因は14031で指摘されていましたp.s以下の事だったのでしょうか。
    お世話になりましてありがとうございました。

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■14041 / ResNo.9)  Re[7]: 変数を反映させたい
□投稿者/ ONnoji -(2023/11/12(Sun) 13:17:20)
    2023/11/12(Sun) 20:54:16 編集(投稿者)

    > &指定年、&指定月、をア kexで共通変数と宣言していた。
    > イ cmxで@共通変数と宣言してみた A固有変数と宣言してみた
    >      B宣言しなかった
    > いくつか試してみた結果、アとB の組み合わせで望む結果となりました。
    > 原因は14031で指摘されていましたp.s以下の事だったのでしょうか。

    cmxで

    @共通変数と宣言してみた ⇒ × 変数の上書き

    A固有変数と宣言してみた ⇒ × スコープが異なる同名の変数(共通変数が隠される)

    B宣言しなかった     ⇒ △ すでにア kexで宣言済みの共通変数をそのまま使う

    なお、@を回避するためには、14024 の
       ・・・・・・・・・・・・・・・・
     条件 ( #配列要素数( "variableName" ) = -1 ) 変数宣言 共通,文字列{ &variableName }

    が必要です。

    Bはcmx を実行する前に変数を宣言しておく必要があります。

     なので、もしも変数が宣言されていない場合にはエラーになります。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    結論としては、いずれにしても変数は宣言しなければなりませんので、

    変数の上書きを回避するために次のようにする必要があります。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・

     〇 条件 ( #配列要素数( "variableName" ) = -1 ) 変数宣言 共通,文字列{ &variableName }

    つまり、貴殿は気付かれていないようですが、最初の回答14024 が正解だったのですが・・・(^^ゞ

    > 原因は14031で指摘されていましたp.s以下の事だったのでしょうか。

    余談ながら当方が指摘したp.s.の内容は、[A固有変数と宣言してみた]の場合に該当します。


    p.s.

    なお、回答中の variableName とは、英語風で変数名の意味なので

     条件 ( #配列要素数( "variableName" ) = -1 ) 変数宣言 共通,文字列{ &variableName }

    は、具体的には次のように

     条件 ( #配列要素数( "指定年" ) = -1 ) 変数宣言 共通,文字列{ &指定年 }

     条件 ( #配列要素数( "指定月" ) = -1 ) 変数宣言 共通,文字列{ &指定月 }

    になりますよ。



引用返信 [メール受信/OFF] 削除キー/

次のレス10件>

スレッド内ページ移動 / << 0 | 1 >>

このスレッドに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -