過去の桐井戸端BBS (桐ver.9)
18561 オブジェクト操作で「KU1135:コマンドの形式に誤りがあります(= がありません)」のエラーがでる はちがめ 2003/01/17-00:33
イベントを作成しています。

一般手続きで下記のコマンドを実行すると、標記のエラーが発生します。
「オブジェクト操作 &mWFM右端項目名 =@t項目名9.ソース"#項目属性(16,1)"」

上記の一行は、実際のイベントファイルからコピペしました。
(半角全角の区別は問題ないと思います。)
またこのコマンドは「オブジェクトのリスト」から該当オブジェクトの「ソース」をコマンド生成で作成しています。
生成されたコマンドから「ハンドル=」(半角)を削除、「変数名」を当該変数に変更しただけでその他は書き直し等一切していません。
変数「&mWFM右端項目名」は、局所・文字列型をメインで定義しています。
(固有でも試しましたが結果は同じ)

このコマンドは、フォームに貼り付けたコマンド釦の「マウス左クリック」の
イベントハンドラの一行目で呼び出された一般手続きの一行目で実行されます。
つまり、前処理は一切無いということでしょうか。
ただこのフォーム自体は、別のイベントハンドラの中で「フォーム呼び出し 編集表=する」で呼び出されたもので、
その前にはかなり複雑の処理をしています。しかし今回のケースでは関係ないだろうということで割愛します。

環境は桐V9,WIN2Kです。迷宮から抜け出せません。よろしくお願いします。
18563 Re:オブジェクト操作で「KU1135:コマンドの形式に誤りがあります(= がありません)」のエラー 今村 誠 2003/01/17-04:09
記事番号18561へのコメント
はちがめさんこんにちは項目名を取り出したいのではないでしょうか

proc エラー判定(整数 &更新モ,参照 文字列 &項目の名前)
  var 自動,文字列{&focus,&atai}
  method @フォーム.更新モード取得(&更新モ)
  cond (&更新モ) method @フォーム.更新モード設定( 0 )
  method @フォーム.フォーカスオブジェクト取得(&focus)
  object &atai = &focus.ソース /* ソースの値を取り出します*/
  確認 &atai    /* ここは後で削除します*/
  &focus=#S(#S(&atai,"[",""),"]","") /* 項目名で不要な[]を削除*/
  &focus=#cond(#項目属性(#項目番号(&focus),2)="文字列",&focus,1,"")
  cond (&focus="") 確認 "文字列項目を指定して下さい",&実行リターン
  cond (&focus="") &実行リターン=1
  &項目の名前=&focus
end

18564 Re:オブジェクト操作で「KU1135:コマンドの形式に誤りがあります(= がありません)」のエラー ONnoji 2003/01/17-07:25
記事番号18561へのコメント
はちがめさん、こんにちは。

内容を拝読すると、
t項目名9というテキストオブジェクトの属性:ソースの値を、
変数:&mWFM右端項目名 に代入するということだと思いますが・・・

オブジェクト操作 &mWFM右端項目名 =@t項目名9.ソース"#項目属性(16,1)"
から "#項目属性(16,1)" という部分を取り除いて、
オブジェクト操作 &mWFM右端項目名 =@t項目名9.ソース
と変更するとエラーしなくなると思います。

外していたらすいません。

18571 (= がありません)」のエラー はちがめ 2003/01/17-15:07
記事番号18563へのコメント
コマンドの形式に誤りがあります(= がありません)」のエラー
今村 誠さん、早速のレスありがとうございます。
返答が遅れて申し訳ありません。
ご教授頂いた内容を検証してみたりしていましたので、遅れてしまいました。

>はちがめさんこんにちは項目名を取り出したいのではないでしょうか
そうですね。そのようなニュアンスです。
ただ微妙に違いがあるのかなーを思います。
私が今していることの説明が不足していました。改めて説明します。
今回のフォームは一覧表形式で、編集対象表は転置集計表です。
普通、項目名に相当する部分(ヘッダ)にラベルを配置しますが、編集対象表が転置集計表のため、
テキストを配置し関数「#項目属性(16,1)」を使用して項目名を表示しています。
使用の都度変化する転置集計表の項目名の、今そのオブジェクトに表示されている
項目名(転置集計表の項目名)を取得したいということです。

そのような目的を実現するのに「オブジェクト操作」コマンドが適合しているのかどうか解りませんが、
とりあえずそのコマンドを使ってみたところです。
今村さんからは、その代替手法をご教授頂きました。
ありがとうございます。
ちなみに「メソッド呼び出し」コマンドが多用され(メソッドはまだよく理解していません)
コードを読み通しただけでは、何をどうしているのか解りません。
最初の「method @フォーム.更新モード取得(&更新モ)」からして理解不能。(ヘルプは見てみました)
とりあえずお示し頂いた一般手続きを丸ごとコピペして、「オブジェクト操作」の代わりに手続き実行で呼び出してみました。
「手続き実行 エラー判定( 1,&mWFM右端項目名 )」
結果はOB。たぶん引数あたりが間違っているのかなーと思いますが、&mWFM右端項目名の内容は入っていませんでした。

そのようなことで、未だ実現していません。引き続きよろしくお願いします。
18578 (= がありません)」のエラー はちがめ 2003/01/17-17:03
記事番号18564へのコメント
(= がありません)」のエラー (3)
ONnojiさん、早速のレスありがとうございました。

>t項目名9というテキストオブジェクトの属性:ソースの値を、
>変数:&mWFM右端項目名 に代入するということだと思いますが・・・
そうなのですが、そのテキストオブジェクトの属性:ソースの値は関数を使用しており、
その関数によりセットされた値をセットしたいということです。
そのようなことが可能なのかどうかは解りません。
具体的には、今村さんへの返答に書きましたので省略します。

で、ONnojiさんの手法を使ってみました。仰るとおりエラーはでなくなりました。
が、変数の内容が違いました。案の定「"#項目属性(16,1)"」が帰ってきます。今回ほしいのはその関数で
帰ってくる項目名そのものということでした。
ただ、今回の疑問の主旨は漠然と解決されたように思います。

今回は、「オブジェクトのリスト」からひな形作成をしたため、できあがった構文は、
基本的に間違っていないものと鵜呑みしてしまいました。
そこに「(= がありません)」のエラーがでたためそこにこだわった解決法を探して
ご指摘の部分には全く目がいっていませんでした。

どこかのBBSかHPで「エラーメッセージの意味は、
かならずしもエラーの内容を表してはいない」というのを見たような気がします。
(ひょっとしてONnojiさんのHP(^^;)
今回まさにそれだったようですね。

うん!とここまで書いたところで、根本的な解決法がひらめきました。
今村さんへの返答で書いたとおり、今回私がしていることは、
結果的には転置集計表の項目名を取得したいでした。
とすれば、転置集計する前に元表を転置する項目で並び替え・単一化して
その項目値を配列変数に取り込んでおけば、
転置集計後配列番号からその内容を項目名として取り出すことができますか?・・・!
自分一人で納得しています。すみません。お騒がせしました。

今回の件は何とか解決の方向が見えてきました。後で試してみます。
でも、ONnojiさんのおけげでエラーメッセージの件、ひな形生成の件たいへん勉強になりました。
ありがとうございました。
18579 取得と設定どちらをされたいのでしょうか? 今村 誠 2003/01/17-17:07
記事番号18571へのコメント
はちがめさんこんにちは。
proc エラー判定(整数 &更新モ,参照 文字列 &項目の名前)
  var 自動,文字列{&focus,&atai}
1)  method @フォーム.更新モード取得(&更新モ)
2)  cond (&更新モ) method @フォーム.更新モード設定( 0 )
3)  method @フォーム.フォーカスオブジェクト取得(&focus)
  object &atai = &focus.ソース /* ソースの値を取り出します*/
  確認 &atai    /* ここは後で削除します*/
  &focus=#S(#S(&atai,"[",""),"]","") /* 項目名で不要な[]を削除*/
4)  &focus=#cond(#項目属性(#項目番号(&focus),2)="文字列",&focus,1,"")
5)  cond (&focus="") 確認 "文字列項目を指定して下さい",&実行リターン
6)  cond (&focus="") &実行リターン=1
  &項目の名前=&focus
end

1)2)3)を削除して
  &focus="t項目名9"
これでもいいしONnojiさんの記述でもいいと思います。
フォーカス取得は 現在のカーソルのある位置のオブジェクト名を取り出すメソッドです。
コマンドボタンを押すことによるラベル名変更にはあまり向かないかもしれません。

また更新モード設定は表示と訂正を切り替えると覚えられたら簡単ではないかと思います。

>そのような目的を実現するのに「オブジェクト操作」コマンドが適合しているの
>かどうか解りませんが、とりあえずそのコマンドを使ってみたところです。
これはよい発想だと思います。
ただ使い方が項目名の取得ではなく項目名の設定のような気がします。
私が示した例は取得の方でしたので、設定をどこでしたがうまくいくのかは実験していませんので………
メイン部がいいのか、フォーム開始がいいのか、タイマーイベントがいいのかが問題のような気がします。

今日はこれから用事があるので書き込みできませんが、
そのあたりをもう少し詳しく説明された方が、他の方からもよいアドバイスが得られると思います。

4)5)6)も行削除して下記のコマンドから呼び出すと項目名が変数に代入されると思います。
>「手続き実行 エラー判定( 1,&mWFM右端項目名 )」
>結果はOB。たぶん引数あたりが間違っているのかなーと思いますが、
>&mWFM右端項目名の内容は入っていませんでした。

18581 (= がありません)」のエラー はちがめ 2003/01/17-17:11
記事番号18571へのコメント
今村さん、こんにちは

ONnojiさんのレスに書きましたが、
今回の質問では、全く別方向になってしましましたが、
なんとか解決の方向が見えてきました。

しかし今村さんからいただいた提案については、
メソッドの勉強もかねて、改めて研究してみます。

今村さんのサポートに感謝します。
今後ともよろしく。


18583 Re:(= がありません)」のエラー うにん 2003/01/17-21:01
記事番号18578へのコメント
>>t項目名9というテキストオブジェクトの属性:ソースの値を、
>>変数:&mWFM右端項目名 に代入するということだと思いますが・・・
>そうなのですが、そのテキストオブジェクトの属性:ソースの値は関数を使用しており、
>その関数によりセットされた値をセットしたいということです。
>そのようなことが可能なのかどうかは解りません。

それは、「ソース」というプロパティでなく「ソース値取得」メソッドで可能です。

メソッド呼び出し @t項目名9.ソース値取得( &mWFM右端項目名, 0)

18584 ありがとうございました。 はちがめ 2003/01/17-23:05
記事番号18579へのコメント
今村さん、こんばんは。
重ね重ねありがとうございます。
別方向から解決の見通しがついた旨お礼の投稿とほぼ同時にレス戴いてたんですね。
タイトルの疑問については、今回私がしたいことは取得です。
読み直してみましたところ、肝心なのは真ん中の三行だんたんでしょうか?
内容もよくわからないで、丸ごとコピペして実行していました。笑っちゃったでしょ。
ただ、この方法だと当該オブジェクトに設定した内容は帰ってきますが、
その設定によって得られた結果を取得することはできないようでした。
そうこうするうち、うにんさんからアドバイス戴きまして、
今試したところみごと期待する結果を得ることができました。
今回は、うにんさんご教授の方法で目的を実現したいと思います。
説明不足に理解不足の投稿におつき合い頂きましてありがとうございました。
今後ともよろしくお願いします。
18585 期待どおりの結果 はちがめ 2003/01/17-23:21
記事番号18583へのコメント
うにんさん、こんばんは。
ご教授ありがとうございます。

ご教示戴きましたコマンド試してみました。
みごと目的の結果を得ることができました。
なるほど「ソース値取得」メソッドですか。メソッドをも少し勉強してみます。

別方向からの解決も考えましたが、今回この方法で実現できそうなので早速使わせて頂きます。
ありがとうございました。

戻る