過去の桐井戸端BBS (桐ver.8)
12792 日時値の置換でエラーになる NANA 2001/08/28-15:36
いつも御世話になっております。
BBSへの書き込みは久しぶりですが
どうしても分からない事があります。

&処理日は日時型、&キャンセル日は文字型と変数宣言しています。
項目名[キャンセル日]は日時型です。
フォームで&処理日に日付を入力して下記のコマンドを実行すると

手続き定義開始 処理日::ソース値更新()
メソッド呼び出し @フォーム.更新モード設定(0)
&キャンセル日=#文字列(&処理日)
置換 終了状態=&終了,[キャンセル日]=_&キャンセル日
絞り込み解除 1
&受講番号=#未定義,&処理日=#未定義
メソッド呼び出し @フォーム.更新モード設定(0)
メソッド呼び出し @受講番号.フォーカス設定()
メソッド呼び出し @フォーム.更新モード設定(2)
手続き定義終了

KD1074:計算式に誤りがあります
平成13年 7←
というエラーになって置換が出来ません。

変数の値を調べると次のようになっています。
変数『&キャンセル日』の内容--->平成13年 7月20日(文字列型)


どなたか知恵を貸してください<(_ _)>
12793 Re:日時値の置換 うにん 2001/08/28-16:33
記事番号12792へのコメント
NANAさん

>&処理日は日時型、&キャンセル日は文字型と変数宣言しています。
>項目名[キャンセル日]は日時型です。
>フォームで&処理日に日付を入力して下記のコマンドを実行すると
>
>手続き定義開始 処理日::ソース値更新()
>メソッド呼び出し @フォーム.更新モード設定(0)
>&キャンセル日=#文字列(&処理日)
>置換 終了状態=&終了,[キャンセル日]=_&キャンセル日

置換なんだから、
[キャンセル日]=&キャンセル日
でしょう。
「絞り込み <項目名>_<文字列型変数>」と混同してますね。

12795 Re:日時値の置換 ONnoji 2001/08/28-17:26
記事番号12792へのコメント
>KD1074:計算式に誤りがあります
> 平成13年 7←
>というエラーになって置換が出来ません。
>
>変数の値を調べると次のようになっています。
>変数『&キャンセル日』の内容--->平成13年 7月20日(文字列型)

NANAさん、こんにちは。

&キャンセル日=#文字列(&処理日)の部分を以下のように変更したらエラーは無くなると思いますが、いかがでしょうか?

 :
&キャンセル日=""""+#文字列(&処理日)+""""
置換 終了状態=&終了,[キャンセル日]=_&キャンセル日
 :

外していたらごめなさい。
12816 Re:日時値の置換 NANA 2001/08/29-08:28
記事番号12792へのコメント
うにんさん、ONnojiさん本当にありがとうございます。
ONnojiさんの
&キャンセル日=""""+#文字列(&処理日)+""""
をヒントに以下の式を使用しました。
&キャンセル日="d"+""""+#文字列(&処理日)+""""
見事に動きました(^_^)v

データ型の管理はとても難しいですね。
けど頑張っていきますのでこれからもよろしくお願い致します<(_ _)>
12819 Re:日時値の置換 うにん 2001/08/29-09:54
記事番号12816へのコメント
NANAさん

>うにんさん、ONnojiさん本当にありがとうございます。
>ONnojiさんの
>&キャンセル日=""""+#文字列(&処理日)+""""
>をヒントに以下の式を使用しました。
>&キャンセル日="d"+""""+#文字列(&処理日)+""""
>見事に動きました(^_^)v

あれ?読み直したら「項目名[キャンセル日]は日時型です。」ですね。
わざわざ文字列型に変換して置換してるから文字列型だと思ってしまってたような。
他のところで&キャンセル日を使ってなければ、いらないのでは?
置換 終了状態=&終了,[キャンセル日]=&処理日
で十分だと思うのですが。

12832 Re:日時値の置換 NANA 2001/08/29-15:34
記事番号12819へのコメント
うにんさん、何度もありがとうありがとうございます<(_ _)>

もう一度、[キャンセル日]=&処理日で動かしましたがやはりエラーでした。

そこでマニュアルを見たところ、
■構文
置換  終了状態 = <変数名> ,\
<項目名> = <計算式> ,…|<項目名> = _<文字列型の変数名> ,…という風に、

置換は文字列型の変数名を使用し、前にアンダーバーが必要になります。

なので、どうしてもこれを実現させるには
>&キャンセル日="d"+""""+#文字列(&処理日)+""""、と書いて

置換 [キャンセル日]=_&キャンセル日
のように、代入しました。

以上の2点を満たしていないと、動かないようです(^^;ゞ

私も、桐歴1年未満でまだまだ未熟ですが
お互いに頑張りましょう(^_-)-★

12833 Re:日時値の置換 ONnoji 2001/08/29-16:23
記事番号12832へのコメント
NANAさん、こんにちは。

すでに解決しているようですが、少しお尋ねさせてもらっていいでしょうか。

>&処理日は日時型、&キャンセル日は文字型と変数宣言しています。
>項目名[キャンセル日]は日時型です。
>もう一度、[キャンセル日]=&処理日で動かしましたがやはりエラーでした。

(1)&処理日は日時型だそうですが、変数の種類は自動、局所、固有、共通のどれでしょうか?
もしかすると、&処理日は局所の日時型ではないでしょうか?

>もう一度、[キャンセル日]=&処理日で動かしましたがやはりエラーでした。
このエラーが重要でして次のエラーではなかったでしょうか?
KD1717:未定義もしくは使用できない自動か局所の変数名があります

置換 終了状態=&終了,[キャンセル日]=&処理日

こういう理由でエラーになるなら、うにんさんも納得すると思うのですが。

(2)&キャンセル日も局所の文字列型ではないでしょうか?
試したところ下線(_)を使った置換の場合には、
&キャンセル日が自動または局所の文字列型変数でもエラーにはならないようです。

&キャンセル日="d"+""""+#文字列(&処理日)+""""
置換 終了状態=&終了,[キャンセル日]=_&キャンセル日
12834 Re:日時値の置換 うにん 2001/08/29-16:41
記事番号12832へのコメント
本人の問題は解決してるのにだだをこねてすいませんが(^^;

NANAさんは No.12832「Re:日時値の置換」で書きました。

>もう一度、[キャンセル日]=&処理日で動かしましたがやはりエラーでした。
>
>そこでマニュアルを見たところ、
>■構文
>置換  終了状態 = <変数名> ,\
><項目名> = <計算式> ,…|<項目名> = _<文字列型の変数名> ,…という風に、
>
>置換は文字列型の変数名を使用し、前にアンダーバーが必要になります。

あれ〜?こっちの桐8sp6のヘルプだと
置換 終了状態=<変数名>,<項目名>=<置換計算式>, …
になってますが。アンダーバーの書き方もあるんですね。うちのは古いみたい?(^^;

しかし、上のマニュアルの記述は|がありますように、
<項目名> = <計算式> を並べる書き方と <項目名> = _<文字列型の変数名> を
並べる二通りの書き方があります、という意味です。(混ぜてもいいようです)
<計算式>には変数が使えますから、日時型の変数であれば日時型の項目にそのまま
置換可能なはずなんですが。。。実際こちらでやってみると

変数宣言 固有,日時{&処理日}
代入 &処理日=d"2001-8-30"
置換 [date]=&処理日

これでぜんぜん問題ありません。([date]は日時型の項目)

アンダーバーを使うのは本来文字列変数の値が数式になってる場合で、こんな風に使います。

代入 &STR="#日数加算(d""2001-8-30"",10)"
置換 [date]=_&STR

置換の結果が9月9日になります。

もうちょっとわかりやすくすると、

代入 &STR="1+2"
置換 [数値型の項目]=_&STR

で、[数値型の項目]の値が3に置換されます。こういう複雑なことが必要なケースは
少なくて、たいてい <項目名> = <計算式> で間に合います。

>なので、どうしてもこれを実現させるには
>>&キャンセル日="d"+""""+#文字列(&処理日)+""""、と書いて
>
>置換 [キャンセル日]=_&キャンセル日
>のように、代入しました。

あ、結局文字列変数に計算式を入れる使い方でやってるわけですね(^^;

&処理日が文字列型になってるような気がする。。。

12844 置換式のアンダスコア+文字列型変数名の意味 佐田 守弘 2001/08/29-22:50
記事番号12834へのコメント
【書式】置換 終了状態=<変数名>,<項目名> = _<文字列型の変数名>
の記述形式を使う場合の、アンダスコア(_)+<文字列型変数名>
の意味について補足します。
この書式で文字列型変数名を指定する時には、その文字列型変数に代入されているのは、置換値になる計算式を記述した文字列です。

分かりやすい例で説明します。
例えば、[年齢]の項目を[年齢]+10で置換するとします。
この[年齢]+10という計算式の記述を文字列として、&計算式記述 という変数に代入しておきます。
つまり、
代入 &計算式記述="[年齢]+10"
を実行しておくわけです。

次いで、
置換 [年齢]=_&計算式記述
の様な書き方で置換します。

もちろん、単に20という定数値も計算式ですから、
代入 &計算式記述="20"
置換 [年齢]=_&計算式記述
の様に書いてもエラーにはなりません。

通常この様な面倒な事をする必要はないのですが、ある特殊な場合には、この様な使い方が有効になる時があります。
それは、置換に使う計算式そのものを計算式として作り出したい様なケースです。
これはちょうど、実行したいコマンドを計算式で作り出す「コマンド」コマンドの様なものと理解してもらえば良いと思います。

佐田守弘(KS-00119)
12856 Re:日時値の置換 NANA 2001/08/30-10:30
記事番号12833へのコメント
何度も申し訳ありません<(_ _)>

>もしかすると、&処理日は局所の日時型ではないでしょうか?
その通りなのです(^^;ゞ

そこで&処理日を固有で宣言したところ、
[キャンセル日]=&処理日で動きました(^_^)v

でもなぜ、局所ではだめで、固有では動くのかが分かりません。

管理工学から出ている「グラフ・結合表」のP106に
注意!表の項目計算式と検索条件名、置換式、置換条件名の
中に局所変数を使用してはいけません。
イベントハンドラの中(イベント発生時の手続き内)では、
使用する事が出来ます。

とあります。
これを読む限り、イベント発生時の手続き内なので、出来そうな気がするんですが・・・。

ここまで詳しく書いてある解説書があればよいですね(^^;ゞ


12857 Re:日時値の置換 NANA 2001/08/30-10:35
記事番号12834へのコメント
うにんさん、本当にありがとうございます。
わざわざ私は、回りくどいやり方をしていたんですね。

>変数宣言 固有,日時{&処理日}
>代入 &処理日=d"2001-8-30"
>置換 [date]=&処理日
のとおり、固有で宣言したら、
問題なく動きました(^_^)v

本当にありがとうございます<(_ _)>

12863 Re:日時値の置換 ONnoji 2001/08/30-15:21
記事番号12856へのコメント
>>もしかすると、&処理日は局所の日時型ではないでしょうか?
>その通りなのです(^^;ゞ
>そこで&処理日を固有で宣言したところ、
>[キャンセル日]=&処理日で動きました(^_^)v

NANAさん、こんにちは。
何度もレスをいただいてすいませんでした。

置換 [項目名]=&局所変数 は必ずエラーになります。

試しに、会話処理の項目置換で

置換する項目名:[キャンセル日]
計算式 :&処理日 <--これは局所変数とする

としても同じエラーになるはずです。

なお、固有の&処理日と局所の&処理日という具合に同名の変数が存在したときには注意が必要です。
この場合には固有の&処理日が自動的に使われてしまいます(私は何度か騙されました経験があります)。
置換の場合に限り局所と自動は桐から見えていないようです。
「KD1717:未定義もしくは使用できない自動か局所の変数名があります」とは桐から
見えない変数を指定しましたという意味になるかと思います。
ただし、こういう例外は置換の場合くらいですが...。

>でもなぜ、局所ではだめで、固有では動くのかが分かりません。
>管理工学から出ている「グラフ・結合表」のP106に
>注意!(1)表の項目計算式と(2)検索条件名、置換式、置換条件名の
>中に局所変数を使用してはいけません。

局所ではだめで、固有では動くのというのは、上の引用文の通りということですね。

>イベントハンドラの中(イベント発生時の手続き内)では、
>使用する事が出来ます。
>とあります。これを読む限り、イベント発生時の手続き内なので、
>出来そうな気がするんですが・・・。
という部分は、イベント処理(.kev)の中では局所変数を利用することが出来ます
くらいの意味でしょう。
行間を読むと、「しかし、置換式には使えないことには変わりありません」と読めなくもありませんね。
それにしても、引用文の説明はわかり難いですね。

<蛇足>
今回初めて試してみたのですが、
置換 [項目名]=_&局所文字列型変数 は必ずしもエラーになりませんでした。
この方法は文字列型の変数しか使えないという点がネックかもしれません。
しかし、固有変数を使わなくても済むという点では良いかもしれません。
必ずしもエラーになりませんと書いたのは、
&局所文字列変数の内容を式に展開したときに、その式の内容に局所変数を含んでいるとやはりエラーになるからです。
自動の文字列型変数も同じでした。

ちょっと教訓めいてしまいますが、桐のhtm版ヘルプと内蔵版のヘルプではどちらかに内容のもれがある場合が非常に多いように思いました。
結局、両方のヘルプを調べてみなければならないと痛感した次第です。

NANAさん、いろいろ勉強になりました。どうもありがとうございます。

12865 Re:日時値の置換 NANA 2001/08/30-16:01
記事番号12863へのコメント
ONnojiさん、こちらこそ何度もすみません<(_ _)>
まだ桐の「き」の字も知らない状態なので、
お騒がせしてしまって申し訳ありません。

でも、話がいろいろ展開してくるので、
一つ分からない事を知ろうとすると、
結果、三つくらい知識が増えてゆきます(^_^)

こちらこそ、本当に勉強になりました。
これからもよろしくお願い致します<(_ _)>
                
                ★NANA★


戻る