過去の桐井戸端BBS (桐ver.9)
19156 イベント(ソース値更新)で表引き関数は使えるのでしょうか katsuyoshi 2003/03/03-01:53
フォームの[区分]オブジェクトに次のようなイベントを書きました。
実行したら「KU1033:使用できない関数です」と桐に怒られました。
使用できない関数は #cond?それとも #TLU?
それとも記述ミス?
お願いします。

内容はA.tblは予約の内容で項目は [No][区分]・・・・とあります。
質問のフォームは編集対象表にB.tblを指定しています。
B.tblは本契約の内容を入力しますがB.tblの[No]に数値が入力されたら
A.tblの[No]を見てB.tblの[区分]にA.tblの[区分]を表引きしたいのです。
項目計算式に表引きを設定すると変更が出来ませんので項目属性の入力で
編集初期値に設定すると[No]の変更で再計算が出来ないのでイベントに挑戦しています。

手続き定義開始 t区分::ソース値更新()
 変数宣言 自動,長整数{&更新モード}
 メソッド呼び出し @フォーム.更新モード取得(&更新モード)
 ケース開始
 ケース(&更新モード=0)
  行訂正 [区分]=#cond([No]<>0,#TLU([No],=,A.tbl,[No],[区分]))
 ケース その他
  項目値代入 [区分]=#cond([No]<>0,#TLU([No],=,A.tbl,[No],[区分]))
 ケース終了

手続き定義終了

19158 Re:イベント(ソース値更新)で表引き関数が使えない? 今村 誠 2003/03/03-12:12
記事番号19156へのコメント
katsuyoshiさんこんにちは

>フォームの[区分]オブジェクトに次のようなイベントを書きました。
>実行したら「KU1033:使用できない関数です」と桐に怒られました。
>使用できない関数は #cond?それとも #TLU?

#TLUです
ワークスペースにおいたコマンドボタン
オブジェクト名 ctlu
表題 表引き
→機能名 機能パラメーターリスト
1 なし #set(STR,#TLU(([No],=,A.tbl,[No],[区分],"No",1))

手続き定義開始 t区分::入力前(参照 文字列 &編集文字列)
  method @ctlu.実行()
  &編集文字列=&STR

1:使う変数は[No]のデータ型で変えないとエラーになります。
2:組込か共通或いは固有でないとコマンドボタンが受け付けないと思います。
区分を変えるのは入力前か[No]のソース値更新がいいのではないでしょうか。
>手続き定義開始 t区分::ソース値更新()

19159 Re:訂正です 今村 誠 2003/03/03-12:16
記事番号19158へのコメント
>1 なし #set(STR,#TLU(([No],=,A.tbl,[No],[区分],"No",1))
1 なし #set(STR,#TLU([No],=,A.tbl,[No],[区分],"No",1))

19160 「行訂正」で#表引きは使えない筈 悲しげ 2003/03/03-12:33
記事番号19156へのコメント
どもっ、katsuyoshiさん
答えは「行訂正」で#表引きは使えない、ってことですね。
(これは「イベントで云々」以前の問題かと思います)
#表引き関数は、一括処理の中では「置換」コマンドと組み合わせて使われます。
ただし「置換」は、全レコードについて実行されますから、
これを行う場合は、当該1行を絞り込んでから実行する必要があるのが一長一短です。

>項目計算式に表引きを設定すると変更が出来ませんので項目属性の
>入力で編集初期値に設定すると[No]の変更で再計算が出来ないので

項目計算式を設定してあると「変更が出来ない」と云うことではなく
「手動で任意の値を入力することが出来ない」だと思います。
編集初期値での設定では、基本的には「任意の値を手動で入力」なのですが、
その初期値をあらかじめ取得しておいて、
その値を「手動的に」訂正(または無訂正)すると云うことですから、
「自動的に(再計算)」はしないのは当然です。
問題は、値を「手動で修正することがあるか否か」になると思います。

もし、表引き以外の値を入れること(未定義以外)が無いのであれば、項目計算式に
 #cond([No]<>0,#TLU([No],=,A.tbl,[No],[区分]))
を設定しておいて、
 行訂正 終了状態=&実行リターン
のような記述をさせることもあろうかと思います。
項目名を省略すると、計算項目が設定されている項目が再計算されます。
置換とは違って、この場合は当該レコードのみが対象となりますから、絞り込む必要はありません。

次、値を「手動で修正」したい場合。
単なる思いつきですが、編集初期値を設定してあるとすれば、
これは項目値が空の場合にのみ生きますから、処理としては、
一旦項目値を空にしてから再度フォーカスを移してみるとか、
あるいは、入力支援牡丹なんかも使えるかもしれません(が、
私は不得手)。
あるいは[某]作業項目経由にして
 #cond([某],[某],1,#TLU([No],=,A.tbl,[No],[区分]))
のような項目計算式も有り得るかと思います。

一番融通が利くのは、[No]を変数に取得してから、A.tblを開き、
当該[No]の行を検索、[区分]値を変数に取得してから
A.tblを閉じてB.tblに移り行訂正で[区分]値を書き込む方法だと思います。
これはパターン化しておけば、随所で再利用できて便利です。

19161 Re:訂正です 今村 誠 2003/03/03-16:04
記事番号19159へのコメント
01:&STR=#TLU([No],=,"A.tbl",[No],[区分],"No",1)
02:確認 &STR
03:行訂正 [区分]=&STR
としてもイベントの中では01:でエラーになります。
(KU1033使用できない関数です。)
行訂正 イベントでの使用 △編集対象表が表示状態のときのみ操作可能。
となっていますので、ソース値更新では、訂正中のため行訂正できない。
 ケース その他
  項目値代入 [区分]=#cond([No]<>0,#TLU([No],=,A.tbl,[No],[区分]))
これは他の項目への代入なので、自分自身へ代入する場合は
編集文字列変更メソッドを使用する必要があるのではないでしょうか。

http://www.fuku3.com/~habata/kbbs/kakov8/18565.htm
この例もあるので、katsuyoshiさんは、[No]と関係なく変更もしたい
ことがあるように思います。
とすれば、[No]のソース値更新に確認して項目値を代入させるようにし、
なおかつ[区分]の入力前イベントで表引きした値を持ってくるのが、
一番自然のような気がします。

ただ、悲しげさんもお書きになったように、こういう場合は、"A.tbl"の
編集表を別途開いて、検索して商品などの場合は商品名や価格
住所の場合は、市や町を変数に代入して当該B.tblに項目値代入するのが
一般的です。

 コマンドボタンで表引きした場合、表引き表が専有だと索引を
使用して瞬時に値が呼び込めるので、郵便番号簿などのような場合、
体感速度が違います。
19170 非表示モードでできることは限られているので 悲しげ 2003/03/03-21:33
記事番号19161へのコメント
今村さんの投稿へぶら下げましたが、中味はkatsuyoshiさん向けです。
前にも書いたように、編集中のモード(非表示モード)でできる処理は
極めて限られているので、私は諸々の処理はなるべく表示モードで実行させるようにしています。
どうしても編集中のモードで実行させたいとすれば、
色々な力技はあるでしょうが、そこまでやる必要があるかどうか、
ちょっと要検討な場合も多そうです。
些細なところにこだわったばかりに泥沼・・・とか、ね。

編集中のモードでも表示モードでも、表示モードでしかできない処理を
実行させたい場合に、私がよく使う手を書いておきます。
それは、その処理に入る直前に次のようなボタンを実行させると云うことです。

 method @b表示.実行()
 ・・・表示モードでしかできない処理

ボタン「b表示」は、場合によっては、ワークスペース(フォームの枠外)にでもおいておきます。

 機能名  機能バラメタリスト
 表示   確定する

つまり、強制的=無意識的に表示モードにさせてから実行させている訳ですね。
どうです、とても簡単でしょう?
ちなみに、
 method @フォーム.更新モード設定(0)
だけでは値の確定に不安がありますから、ボタンの方が確実です。

編集中のモードを継続させたいのであれば、その処理を終了後に
 method @フォーム.更新モード設定(0)
とか、機能が「訂正」であるボタンを
 method @b訂正.実行()
とすれば、擬似的に訂正モードが継続しているように見えます。

こうゆうトリックは、まるで小泉純一郎みたいで良くない、
との考え方もありましょうけど・・・(^^;)。
19171 訂正(^^;) 悲しげ 2003/03/03-21:36
記事番号19170へのコメント
>編集中のモードを継続させたいのであれば、その処理を終了後に
> method @フォーム.更新モード設定(0)

 method @フォーム.更新モード設定(2)

ですよね。(^^;)
ちなみに「フォーム」は本当は半角です。

19176 やはり変数で項目値代入ですか・・・・・ katsuyoshi 2003/03/04-01:22
記事番号19161へのコメント
今村さんありがとうございました。
悲しげさんがおっしゃるようにやはり変数を使ったほうが良いようですね。
イベントや一括処理はまだ足を(いや 足の指くらいかな)
踏み入れたばかりでほとんど無知です。
悲しげさんのスレッドにぶら下がって勉強させてもらいます。

>http://www.fuku3.com/~habata/kbbs/kakov8/18565.htm
>この例もあるので、katsuyoshiさんは、[No]と関係なく変更もしたい
>ことがあるように思います。
>とすれば、[No]のソース値更新に確認して項目値を代入させるように
>し、なおかつ[区分]の入力前イベントで表引きした値を持ってくるのが、
>一番自然のような気がします。
>
そのとおりです。
今は予約内容を契約フォームに表示させることを考えていますが
契約の段階で予約の内容が変更になることが多くあります。
悲しげさんのスレッドにその辺を書かせてもらいますので
アドバイスがありましたらまたお願いします。
19177 やはり変数を使った項目値代入ですか・・・・ katsuyoshi 2003/03/04-01:54
記事番号19160へのコメント
悲しげさんありがとうございました。

>一番融通が利くのは、[No]を変数に取得してから、A.tblを
>開き、当該[No]の行を検索、[区分]値を変数に取得してから
>A.tblを閉じてB.tblに移り行訂正で[区分]値を書き込む方法
>だと思います。これはパターン化しておけば、随所で再利用
>できて便利です。

今回はこの変数を使う方法を勉強させてください。
やりたい方法をもう少し詳しく書きますので教えてください。
ほとんど会話処理で処理してきましたのでイベントや一括は
無知なのでお願いします。

@予約TBLに申込みを受けた内容があります。
 [予約NO]他20項目位あります。
A契約TBLに契約WFMを使って[予約NO]を入力すると
 予約TBLの[予約NO]と合致するレコードを表引きしたい。
 もちろん契約TBL(契約WFM)の項目は予約TBLの内容とほとんど同様です。
B契約WFMに予約内容(予約TBL)を表示させてから契約を
 確認して行きますが契約の段階で予約の内容が変更となる場合が
 多くありますので表示されている内容を変更できる処理方法としたい。
 (項目計算式で表引きできない理由です)

そこで質問に入ります。(無知の質問)
@契約TBL(契約WFM)の[予約NO]は手入力とします。
 その場合変数宣言は[予約NO]を含む全項目を宣言するのでしょうか?
A変数宣言や表を開くのはどのように記述すれば良いのでしょうか?
とりあえず2点を教えてください。
 

19181 「拡張表引き」の一例 悲しげ 2003/03/04-12:49
記事番号19177へのコメント
一例です。
まず、呼び出し元のkevの記述から。(ファイル名、項目名等は仮称)
-------------------------------------------------------------
名札 メイン
 変数宣言 固有,長整数{&No,&確認,&終了} \
     ,固有,文字列{&文字列項目1,&文字列項目2,・・・・} \
     ,固有,数値{&数値系項目1,&数値系項目2,・・・・}



手続き定義開始 tNo::ソース値更新()
 if([No]="")
  確認 "Noは必ず入力のこと!"
  return
 else
  確認 "No."+#STR([No])+"のデータを検索します",&確認
  条件(&確認<>1) return
 end
 method @b表示確定.実行()
    /*↑ワークスペースにある牡丹。機能名=表示、パラ=確定する*/
 &No=[No]
 フォーム呼び出し "仮称かつよし2.wfm"
 if(&実行リターン=1) /*呼出先で確定終了した場合*/
  行訂正 終了状態=&終了 \
   ,[文字列項目1]=&文字列項目1,・・・・ \
   ,[数値系項目1]=&数値系項目1,・・・・
  method @t数値系項目1.フォーカス設定() /*任意の項目にフォーカス*/
  method @フォーム.更新モード設定(2)     /*訂正モードにする*/
 else if(&実行リターン=-1) /*呼出先で&Noが存在しなかった場合は[No]再
入力とか*/
  method @tNo.フォーカス設定()
  method @フォーム.更新モード設定(2)
 else if(&実行リターン=0) /*呼出先で中止終了したら行削除とか、上記と
逆もあり?*/
  行削除 終了状態=&終了
 end
手続き定義終了
-------------------------------------------------------------
続く

ps
この手法は、昔、私のハンドルネームが『オラ・フデキ』だった頃の
私の先生(かいちょ)が「拡張表引き」と命名していました。
19182 「拡張表引き」の一例(続) 悲しげ 2003/03/04-12:50
記事番号19181へのコメント
続きです。今度は、呼び出し先の"仮称かつよし2.kev"の記述。
(フォームは伝票or一覧表ですよね?)
-------------------------------------------------------------
名札 メイン



手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 検索 [No]{&No},終了状態=&終了
 if(&終了=-1)
  確認 "No."+#str(&No)+"のデータは存在しません→再入力"
  &実行リターン=-1
  method @b閉じる.実行() /*Work Space等に、機能名=閉じる*/
  *実は、この場合、一旦フォームが表示されてから閉じるので一寸みっともない。
  *この辺を凝るなら、タイマーイベントでフォーム開始の次の時点でやるとか。
 end
手続き定義終了

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・・・)
 if(&仮想キーコード=13) /*[Enter]キーで確定終了*/
  &処理中止=1
  if(#EOF)
   確認 "EOFでは駄目よ"
   return
  end
  method @b確定.実行()
  * 機能名  パラ
  *1 実行条件 .not #EOF
  *2 表示   確定する
  *3 なし   #代入(&実行リターン,1),#代入(&文字列項目1,[文字列項目1]),#代入(&文字列項目2,[文字列項目2]),・・・・
  *4 閉じる  保存する (←保存しなくてもいいけど)
 else if(&仮想キーコード=27) /*[Esc]キーで中止終了*/
  &処理中止=1
  method @b中止.実行()
  * 機能名  パラ
  *1 なし   #代入(&実行リターン,0)
  *2 閉じる  破棄する (←破棄しなくてもいいけど)
 end
手続き定義終了
-------------------------------------------------------------

19183 Re:「拡張表引き」の一例(いいわけ) 悲しげ 2003/03/04-12:54
記事番号19182へのコメント
これらはテキストエディタ上で書いたので、挙動は未確認です。(^^;)
不具合は・・・・多分でるでしょうね。(^^;)
19186 Re:「拡張表引き」の一例 katsuyoshi 2003/03/05-00:37
記事番号19181へのコメント
悲しげさんありがとうございました。
参考にさせてもらい記述してみましたが問題が生じました。

>まず、呼び出し元のkevの記述から。(ファイル名、項目名等は仮称)
>-------------------------------------------------------------
>名札 メイン
> 変数宣言 固有,長整数{&No,&確認,&終了} \
>     ,固有,文字列{&文字列項目1,&文字列項目2,・・・・} \
>     ,固有,数値{&数値系項目1,&数値系項目2,・・・・}
>
>*
>
>手続き定義開始 tNo::ソース値更新()
> if([No]="")
>  確認 "Noは必ず入力のこと!"
>  return
> else
>  確認 "No."+#STR([No])+"のデータを検索します",&確認
>  条件(&確認<>1) return
> end
> method @b表示確定.実行()
>    /*↑ワークスペースにある牡丹。機能名=表示、パラ=確定する*/
> &No=[No]
> フォーム呼び出し "仮称かつよし2.wfm"

================================
ここで問題が生じました。
 "仮称かつよし2.wfm"には開始条件が設定してあり開くと最終行で
 行挿入状態となるようにしてあり、指定した[No]には行きません。
================================


19187 Re:「拡張表引き」の一例(続) katsuyoshi 2003/03/05-00:45
記事番号19182へのコメント
悲しげさん 次の問題が生じました。

呼び出し先の"仮称かつよし2.kev"の記述。
>(フォームは伝票or一覧表ですよね?)
==========
 一覧表です。
==========
>-------------------------------------------------------------
>名札 メイン
>
>*
>
>手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
> 検索 [No]{&No},終了状態=&終了
> if(&終了=-1)
>  確認 "No."+#str(&No)+"のデータは存在しません→再入力"
>  &実行リターン=-1
>  method @b閉じる.実行() /*Work Space等に、機能名=閉じる*/
>  *実は、この場合、一旦フォームが表示されてから閉じるので一寸みっともない。
>  *この辺を凝るなら、タイマーイベントでフォーム開始の次の時点でやるとか。
> end
>手続き定義終了
>
>手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・・・)
> if(&仮想キーコード=13) /*[Enter]キーで確定終了*/
>  &処理中止=1
>  if(#EOF)
>   確認 "EOFでは駄目よ"
>   return
>  end
>  method @b確定.実行()
>  * 機能名  パラ
>  *1 実行条件 .not #EOF
>  *2 表示   確定する
>  *3 なし   #代入(&実行リターン,1),#代入(&文字列項目1,[文字列項目1]),#代
>入(&文字列項目2,[文字列項目2]),・・・・
==============================
ここで#代入で指定する変数は項目値代入する全変数ですよね。
 b確定のコマンドボタンをワークスペースに作成したのですが
 "KU1251:指定のオブジェクトは登録されていません"
 のエラーが発生しました。
 解決のヒントをお願いします。
==============================
>  *4 閉じる  保存する (←保存しなくてもいいけど)
> else if(&仮想キーコード=27) /*[Esc]キーで中止終了*/
>  &処理中止=1
>  method @b中止.実行()
>  * 機能名  パラ
>  *1 なし   #代入(&実行リターン,0)
>  *2 閉じる  破棄する (←破棄しなくてもいいけど)
> end
>手続き定義終了
>-------------------------------------------------------------
>

19189 Re:「拡張表引き」の一例 悲しげ 2003/03/05-15:05
記事番号19186へのコメント
どもっ、katsuyoshiさん

まず、引用は必要最小限にしましょう。

>ここで問題が生じました。
> "仮称かつよし2.wfm"には開始条件が設定してあり開くと最終行で
> 行挿入状態となるようにしてあり、指定した[No]には行きません。

う〜ん、もしかして、呼び出し「元」と呼び出し「先」の関係が
逆になっているような気がしないでもありませんが・・・・(?_?)

ま、私が挙げたのは、あくまで一例、つまりは使い方に合わせて
どんどん書き換えてもらうためのひとつの素材に過ぎません。
これが前提なのですが、ナンでしたら今までお使いのフォームは
(おそらくそれなりの用途として必要なのでしょうから)そのまま残しておいてですね、
今回の所謂「拡張表引き」用のフォームを、
それ専用として新設して使うようにすると云う手もあります
(もちろん上述の「開始条件」等、矛盾する設定無しで)。



ついでに補足します。先の投稿で私は、
暫定的に「ソース血更新」イベント(誤変換だけど面白いのでこのまま放置)に処理を書きましたが、
これも本当は要検討かもしれません。
「ソース値更新」イベントは、当該オブジェクトで値を入力・訂正することなく、
単に[Enter]を押下しただけでも発生しますから(そのために「確認」で分岐させるようにしたのですが)、
場合によってはウザイ感じを伴います。
新規行追加(挿入)時のみ(更新モード取得メソッドの返り値で判断)とか、
値が変更された場合だけ(入力前/後イベント)とか、
使い方に応じて色々検討してみる必要がありそうです。
この辺りの自動判断が面倒な私としては(例外対策も含めて)「拡張表引き」用の牡丹を新設して
それを利用するかもしれません(この場合の牡丹の機能は「手続き実行」)。
マウスに手を伸ばすのも面倒であれば「キーダウン」イベントで、
某キー押下で当該牡丹の「実行」メソッドを使うとか。
19211 Re:「拡張表引き」の一例 katsuyoshi 2003/03/06-00:55
記事番号19189へのコメント
悲しげさんありがとうございました。

>まず、引用は必要最小限にしましょう。

確かにすべてを引用することはよろしくないと思います。
しかしながらイベント初心者である私めは引用させて頂いて
その結果をみてなるほどと頷きながら勉強させてもらうしかできません。
そこのところを理解していただければ幸いと思います。

>う〜ん、もしかして、呼び出し「元」と呼び出し「先」の関係が逆に
>なっているような気がしないでもありませんが・・・・(?_?)

呼び出し元と呼び出し先の関係ですが
呼び出し元とは これからデータを入れる表(契約TBL)
呼び出し先とは 既にデータが入力済みの表(予約TBL)
と理解したのですが反対でしょうか?>

>これが前提なのですが、ナンでしたら今までお使いのフォームは(お
>そらくそれなりの用途として必要なのでしょうから)そのまま残して
>おいてですね、今回の所謂「拡張表引き」用のフォームを、それ専用
>として新設して使うようにすると云う手もあります(もちろん上述の
>「開始条件」等、矛盾する設定無しで)。

とりあえず開始条件ははずしてみました。
この項目値代入は今目指していることの入り口です。
何とか中に入れるまで導いて下さい。
お願い致します。


19217 Re:「拡張表引き」の一例 悲しげ 2003/03/06-11:35
記事番号19211へのコメント
どもっ、katsuyoshiさん

>呼び出し元と呼び出し先の関係ですが
>呼び出し元とは これからデータを入れる表(契約TBL)
>呼び出し先とは 既にデータが入力済みの表(予約TBL)
>と理解したのですが反対でしょうか?>

いえ、そのとおりです。
でも先の投稿だと、表引き対象たる呼び出し先表のフォームが、
既に入力済みどころか、常に新規行追加となるような設定にしてあることで、
逆かも?との疑念が誘発されたと云うことです。

>とりあえず開始条件ははずしてみました。
>この項目値代入は今目指していることの入り口です。

前述したとおり、私自身は「項目値代入」よりも「行訂正」を好んでいますが(^^;)、
それはさておき、「開始条件」については、必要が薄ければ外せばいいでしょうし、
そうでなければ(表引きデータの)新規入力用と拡張表引き用と
それぞれ別フォームとすることも有り得ます(「フォーム開始」イベントで条件分けする等、
共用も可能ではありますが、ちと複雑になります)。
19265 「拡張表引き」の一例(No19217)の続きです。 katsuyoshi 2003/03/09-17:02
悲しげさんからご指導頂いた「拡張表引き」の一例の続きの質問です。
if(&終了=-1) 実行リターン=-1
の意味を教えてください。
基本が理解できなくて四苦八苦しています。
ここであきらめたくありませんので
もう少し教えてください。お願いします。
19266 Re:「拡張表引き」の一例(No19217)の続きです。 しぼうかん 2003/03/09-18:54
記事番号19265へのコメント
katsuyoshiさんこんばんわ

>if(&終了=-1) 実行リターン=-1

の意味は()内の計算式、この場合&終了が-1の時組み込み変数の&実行リターン
(たぶん"&"の文字が抜けているような?)に-1を代入すると言う意味だと思います。

"if"の一括処理コマンドは"条件"の別名ですので一括処理コマンドヘルプの"条件"の所を調べて見て下さい。

なお、もし全体のコマンドの記述の中でどういった意味を持っているのか、という質問でしたら、
No.19265「「拡張表引き」の一例(No19217)はよく読んでいないのでわかりません。
ちょっと読んだぐらいでは私にはわかりそうも無い内容なので(^^;)

19267 Re:「拡張表引き」の一例(No19217)の続きです。 悲しげ 2003/03/09-19:22
記事番号19265へのコメント
>if(&終了=-1) 実行リターン=-1
>の意味を教えてください。

おそらく、これは(No19217ではなく)No19182の

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 検索 [No]{&No},終了状態=&終了
 if(&終了=-1)
  確認 "No."+#str(&No)+"のデータは存在しません→再入力"
  &実行リターン=-1
  method @b閉じる.実行() /*Work Space等に、機能名=閉じる*/
 end
手続き定義終了

のことを指していると察します。とすればこの意味ですが──
まずフォームオープンの直後に、呼び出し先表でもって[No]項目について&Noの値の有無を検索しています。
「検索」コマンドの仕様では、該当レコードが存在すれば終了状態変数たる
&終了に1が代入され(引き続き当該フォーム上で任意の値を指定/取得or非取得してからフォームを閉じることになる)、
存在しなければ&終了には-1が代入されます。
つまり if(&終了=-1) とは、[No]=&Noであるレコードが存在しなかったケースを指し、
その場合はフラグ用に使っている変数&実行リターンに-1を代入しています。
そして、直ちに呼び出し先フォームを閉じて、呼び出し元のフォームに戻っています。
どこに戻るかと云えば(No19181の)次の★印部分です。

 フォーム呼び出し "仮称かつよし2.wfm"
 if(&実行リターン=1) /*呼出先で確定終了した場合*/
  (中略)
★else if(&実行リターン=-1) /*呼出先で&Noが存在しなかった場合は・・・
  method @tNo.フォーカス設定()
  method @フォーム.更新モード設定(2)
 else if(&実行リターン=0) /*呼出先で中止終了したら・・・

この場合、変数&実行リターンは、呼び出し先で行われた結果(レコードを指定した、
キャンセルした、該当データが存在しなかった)を1,0,-1として
代入しておくためのフラグ的な入れ物として使っています。
呼び出し元に戻った時に、この&実行リターンの値いかんで次に必要な処理をさせるために。


ps:
まだ続くようでしたら、(過去ログ扱いになる前に)たゆーさんとこ
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi
にでも引越ししましょうか?

19268 Re:「拡張表引き」の一例(No19217)の続きです。 悲しげ 2003/03/09-19:29
記事番号19267へのコメント
フラグ用の変数は、別に&実行リターンではなく、例えば別途宣言して
&フラグとかでもいいですし、また代入する値も「1,0,-1」ではなく、
例えば「1,2,3」でもいいし文字列型なら「取得,中止,無し」のようにしてもいい、
と云えば判りやすいでしょうか?

19269 ご迷惑をおかけしています。 katsuyoshi 2003/03/09-23:32
記事番号19267へのコメント
悲しげさんご迷惑をおかけしています。

>おそらく、これは(No19217ではなく)No19182の
>
>手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
> 検索 [No]{&No},終了状態=&終了
> if(&終了=-1)
>  確認 "No."+#str(&No)+"のデータは存在しません→再入力"
>  &実行リターン=-1
>  method @b閉じる.実行() /*Work Space等に、機能名=閉じる*/
> end
>手続き定義終了
>
その通りです。

[No]を検索したとき「No.のデータは存在しません→再入力」
と表示され #str(&No) が表示されません。
これは 仮称かつよし2.wfm の対象表tblを探しに行っているのでしょうか?
仮称かつよし2.wfm の対象表tblの中にはそのNoのデータは存在します。


>
>ps:
>まだ続くようでしたら、(過去ログ扱いになる前に)たゆーさんとこ
>http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi
>にでも引越ししましょうか?
>
なんか頭の中が混乱していてまとまりません。
たゆーさんのところに引っ越した方がよろしいんでしょうか。
素人で初歩的なことで皆さんに迷惑が・・・・・・と反省しています。



19270 ありがとうございました。 katsuyoshi 2003/03/09-23:36
記事番号19266へのコメント
しぼうかんさん ありがとうございました。
悲しげさんからコメントを頂きましたが
しぼうかんさんの言われるとおりでした。
真であれば "1" 偽であれば "-1"と言う意味だそうです。
素人ですみません。
ご迷惑をおかけしました。
19271 Re:ご迷惑をおかけしています。 悲しげ 2003/03/10-01:32
記事番号19269へのコメント
>[No]を検索したとき「No.のデータは存在しません→再入力」
>と表示され #str(&No) が表示されません。

これは、変数 &No の中味が空と云うことです。
呼び出し元の方で予め &No に値を突っ込んでおいてから、呼び出し先で検索させる訳ですが、
どうやら呼び出し元の方で、&No に値が入っていないようですね。
19272 Re:ありがとうございました。 悲しげ 2003/03/10-01:37
記事番号19270へのコメント
>真であれば "1" 偽であれば "-1"と言う意味だそうです。

う〜ん、広義にはそうなのでしょうけど、この場合はむしろ
「検索」コマンドのヘルプを見た方が判りやすいと思います。
-------------------------------
終了状態 = <変数名>
コマンドの終了状態を代入する変数名を指定します。
変数のデータ型は、整数、長整数、数値、通貨、実数のいずれかで
なければいけません。
変数には、つぎの値が代入されます。
戻り値 説明
1 該当するレコードが存在した。処理対象行は、検索したレコードに移動する。
-1 該当するレコードが存在しなかった。処理対象行は移動しない。
-------------------------------

19331 ありがとうございました。 katsuyoshi 2003/03/12-22:01
記事番号19271へのコメント
悲しげさん ありがとうございました。
初歩的な質問にも答えて頂き本当にすみませんでした。
お礼が遅れましたがじっくりと検証してゆきましたら
おかげさまでやりたいところができようやく入り口にたどり着きました。
感謝申し上げます。
イベントに取り組んで試行錯誤でしたが
悲しげさんのレスをパクらせて頂き勉強しています。
エラーは記述ミスがほとんどの原因でした。
理解しないでまねごとをした結果でした。
なぜエラーかな?を考えながら勉強させて頂きました。
またお世話になるかと思いますが今後ともよろしくお願いします。

戻る