過去の桐井戸端BBS (桐ver.9)
20129 フォーム形式でグループ検索後、明細検索で位置付けを行いたい 小林 2003/04/24-11:31
表引きを行う際、入力支援ボタンを表示させるスペースが無く、フォーム呼び出しにてグループ検索後に
該当する明細行へ位置付けようと、イベントファイルのフォーム開始にグループ検索と検索コマンドを記述しました。
グループ検索・検索とも変数で行っています。
グループ検索はうまくいきましたが、検索がうまくゆきません。
どこかで勘違いしているようなのですが、解かる方がおられましたら、
ご教授お願いいたします。
20141 Re:フォーム形式でグループ検索後、明細検索で位置付けを行いたい うにん 2003/04/24-23:00
記事番号20129へのコメント
>グループ検索はうまくいきましたが、検索がうまくゆきません。

グループ検索をできるレベルの人なら検索ができないというのは考えにくいので、
どういう現象なのかもうちょっと具体的に説明していただかないとコメントしようがありません。

20149 Re:フォーム形式でグループ検索後、明細検索で位置付けを行いたい 小林 2003/04/25-23:14
記事番号20141へのコメント
親フォーム(実はサブフォーム)の項目編集時にキーイベントにより、フォーム呼び出しを行っていますが、
呼び出されたフォームの編集表というのがサブフォーム項目の表引用別データ表です。
グループとしている項目は2つで、親フォームとサブフォームを結ぶ項目データを
変数に代入し、もう一つはサブフォームの明細番号項目(表引きしたい項目ではありません)データを変数に代入したもので、
呼び出されるフォームヘッダ部に非表示としました。
ですから呼び出されるフォームは表引用データ項目のみ一覧表示されます。
フォームが開かれると、呼び出す前にメソッド呼び出し ・・・編集選択位置取得(&pos,&cnt)で
計算された選択範囲文字列を代入された変数でもって検索し、位置付けを行いたいのです。
解って頂けたでしょうか?
今現在は、終了状態 = -1 (該当するレコードが存在しなかった。)
となります。もちろん、同一値データは存在していますし、似たデータも用意してあります。
ひょっとして、フォーム開始イベント内でグループ検索と普通の検索コマンドを記述しているからでしょうか?
やっぱり解りません。どこで間違っているのか、どうか教えてください。
20170 原因が解りました・・・? 小林 2003/04/28-15:12
記事番号20149へのコメント
原因が解りました。
検索コマンドの書式にあるようです。
最初のは、   検索 [項目値]{&文},終了状態=&OK
次に試したのは 検索 [項目値]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK

旨くいったのは 検索 [項目値]_&文,部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK

この他にも、[項目値]{""""+&文+"""*"},終了状態=&OK
[項目値]{""""+&文+"""*"}},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
     [項目値]{=(""""+&文+"""*")},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
等々、いろいろ試しましたが旨く行きませんでした。
もともと変数指定の場合の書式が <項目名> _<文字列型の変数名>
となっていたのに、 <項目名> { <比較式> ,… }
の書式と同一視していたのです。

ですが、どうして同一結果にならないのかが今後の問題となりそうです。
どなたか、すっきりと説明していただけませんか?

20172 Re:原因が解りました・・・? 悲しげ 2003/04/28-18:34
記事番号20170へのコメント
どもっ、小林さん

>検索 [項目値]{&文},終了状態=&OK
>検索 [項目値]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
>検索 [項目値]_&文,部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
>   [項目値]{""""+&文+"""*"},終了状態=&OK
>   [項目値]{""""+&文+"""*"}},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
>   [項目値]{=(""""+&文+"""*")},部分一致検索=しない,文字比較方法=自動,終了状態=&OK

ところで、この時、変数「&文」の中味はどうなっていますか?

問題は、書式と云うよりも、変数の中味のような気がしないでもありません。
20174 Re:原因が解りました・・・? しぼうかん 2003/04/28-19:02
記事番号20170へのコメント
小林さん、こんばんは。

質問の意味が今一わからないのですが

検索 比較式のリファレンスには

>変数に代入した比較式を使用して検索する場合は、
>「<項目名>_<文字列型の変数名>」の形式で指定します。
>変数名の前には、_(アンダーバー)をつけます。

と書いてありますから、変数を使うこの場合
アンダーバーを使った形式しか
うまく行かないのではないでしょうか?

質問の意味を取り違えてハズしていたらすいません。
20176 Re:悲しげさんへ 小林 2003/04/28-21:59
記事番号20172へのコメント
>
>>検索 [項目値]{&文},終了状態=&OK
>>検索 [項目値]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
>>検索 [項目値]_&文,部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
>>   [項目値]{""""+&文+"""*"},終了状態=&OK
>>   [項目値]{""""+&文+"""*"}},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
>>   [項目値]{=(""""+&文+"""*")},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
>
>ところで、この時、変数「&文」の中味はどうなっていますか?
>
>問題は、書式と云うよりも、変数の中味のような気がしないでもありません。

コマンド "メソッド呼び出し 戻り値 =&戻値,@"+&obj+".編集選択文字列置換(&文)"で取得したもので、
データとしては問題ないと思います。
(変数管理で確認しています。)
もちろん選択しない場合もあるわけで、その時も正常に先頭行に位置付け(?)しています。

20178 実験してみました 小林 2003/04/28-22:34
記事番号20170へのコメント
まず、表(test.tbl)を用意します。
項目は[A]のみで、データを"12","123","1234","12345"と4件にしました。
次にフォームを用意します。項目[A]のみの一覧表です。
フォームにイベントファイルを用意します。内容は次のとおりです。

名札 メイン
  変数宣言 文字{&文}
  変数宣言 整数{&OK}
 * &文="123"           /* 交互に切り替えて実験 */
  &文=""


手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 * 検索 [A]{&文},終了状態=&OK                /* 交互に切り替えて実験 */
  検索 [A]_&文,部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
手続き定義終了

上記のいずれの組合せでも旨く位置付けします。
なお、 検索 [A]_&文,終了状態=&OK とし、&文=""
とした場合、 KD1084:比較式の形式に誤りがあります となり、
検索 [A]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
とした場合は、位置付けしませんでした。

20179 Re:実験してみました 悲しげ 2003/04/28-23:57
記事番号20178へのコメント
> * 検索 [A]{&文},終了状態=&OK   /* 交互に切り替えて実験 */
> 検索 [A]_&文,部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK

このふたつは、前者は実態的には「部分一致検索=しない」であり、後者は
「先頭一致」ですから、比較すること自体に意味があるのかどうかはいささか疑問がありますが(^^;)
もしやりたいことが
  検索 [A]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
のようなことであるのなら、
  検索 [A]{&文*},終了状態=&OK
として試してみて下さい。
文法的にはあまり正しくないらしいのですが、
多分うまく動くと思います。ダブルクォーティションが苦手な私は、
専らこのような記述で逃げています。(^^;)

20180 Re:実験してみました 小林 2003/04/29-08:29
記事番号20179へのコメント
悲しげさん、遅くまで診ていただきどうも有難うございます。
昨日投稿して寝たのですが、途中でご指摘の違いが気になっていました。
さっそく試しました。旨く行きますね。
私はDOS時代の桐(Verは3だったか4だったか)から使って、一時別のデータベースソフトへ移行し、
Windows Ver7.1 より再び戻り、現在Ver8ですが、どうも書式が解りづらいので閉口しています。
考えたとおりスムーズに進んだ試しがありません。
それとヘルプや関連書籍が少ないのも困りものです。
アドプレスから出ている 桐@onlineヘルプV8一括編 はもう少し詳しいのでしょうか?
買おうか買わずに済まそうか迷っています。
今のところ、データベースソフトとしては桐以外に使いやすくデータ入力が速く、
後からの変更もわりと簡単に行えるものが見当たりません。規模的にも小零細企業にはもってこいの
データベースソフトだと考えます。
これからもちょくちょく質問しますので宜しくお願いいたします。
20182 Re:実験してみました うにん 2003/04/29-11:52
記事番号20179へのコメント
>  検索 [A]{&文},部分一致検索=先頭一致,文字比較方法=自動,終了状態=&OK
>のようなことであるのなら、
>  検索 [A]{&文*},終了状態=&OK
>として試してみて下さい。文法的にはあまり正しくないらしいのですが、
>多分うまく動くと思います。ダブルクォーティションが苦手な私は、専
>らこのような記述で逃げています。(^^;)

{"文字列"*} は正しいので、結構正しいような気がしないでもないです。

{}の中が比較式なので、「比較式を変数に代入して指定」する書式だと、
(&文に先頭一致で検索したい文字列が入っているとして)
&文=""""+&文+"""*"
検索 [A]_&文,終了状態=&OK
のようになるんでしょうね。

20183 Re:実験してみました 悲しげ 2003/04/29-14:58
記事番号20182へのコメント
うにんさんwrote

>>  検索 [A]{&文*},終了状態=&OK ←★
>>として試してみて下さい。文法的にはあまり正しくないらしいのですが、
>
>{"文字列"*} は正しいので、結構正しいような気がしないでもないです。

実は私自身は、長年に亘って殆ど★印の書き方でやってきて、
支障があったことは皆無なのですが、何かの機会に本件についてサポートに尋ねたところ、
将来的な構文解釈においての挙動は保証できない……
的な回答があったので、他人さまにはなるべく勧めないようにしていたりします。
「あまり正しくないらしい」はそんな含意があります。



それと、詳しく調べた訳ではサラサラないのですが、今回の件(乏しい経験)から何となく推測するに、
この辺りの仕様は次のような感じなのでしょうかね?

>検索 [A]{&文*},終了状態=&OK

>&文=""""+&文+"""*"
>検索 [A]_&文,終了状態=&OK

のように、比較式に変数を利用する場合(且つ部分一致指定がある場合?)は、

  ,部分一致検索=○○,文字比較方法=××

のパラメータは省略した方が無難みたいですね。

20184 Re:実験してみました 悲しげ 2003/04/29-15:11
記事番号20183へのコメント
>何かの機会に本件についてサポートに尋ねたところ、

この部分が具体的にどういうことかと云うと──
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ヘルプ(リファレンス)に記載されているのは、比較式に変数を使う場合は
(それこそ二重引用符を駆使した上で)アンダーバー方式だけであるが、実際には
  検索 [項目名]{&変数}
  検索 [項目名]{&変数*}
  検索 [項目名]{*&変数*}
の書き方でも全く問題なく通るし、この書き方の方が(二重引用符を駆使するまでもなく)初心者にも判りやすいと思う。
ついては、このことを、ヘルプにも明記してはどうか?
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
と云う質問(要望)に対する回答と云うことです。
ただ、それでも懲りない私はその後も使い続けてますけどね。(^^;)
20185 Re:実験してみました うにん 2003/04/29-18:27
記事番号20184へのコメント
>ヘルプ(リファレンス)に記載されているのは、比較式に変数を使う場
>合は(それこそ二重引用符を駆使した上で)アンダーバー方式だけで
>あるが、実際には
>  検索 [項目名]{&変数}
>  検索 [項目名]{&変数*}
>  検索 [項目名]{*&変数*}
>の書き方でも全く問題なく通るし、この書き方の方が(二重引用符を
>駆使するまでもなく)初心者にも判りやすいと思う。

あれ〜?先頭一致や部分一致をしたいだけなら、*を使わずに部分一致検索でいいはず、と思ったら
&STR="B"
検索 [商品名]{&STR},部分一致検索=先頭,終了状態=&実行リターン
だと検索できませんね。
検索 [商品名]{"B"},部分一致検索=先頭,終了状態=&実行リターン
だと見つかるのに。
_&変数の形式は、あくまで「比較式」全体を変数に入れたい場合で、
比較式の一部として変数を使うことは問題ないと思ってたのですが。
ヘルプの「比較式の書き方」には、関数と項目名を使った例はありますが、変数はないですね。でも、
[都道府県]*
という例は載っているので、当然
&変数*
も可能であるべきだと思うのですが。(変数名に*は使えないので、構文解析上問題はないし)

20189 Re:実験してみました 原山 正洋 2003/04/29-21:54
記事番号20185へのコメント
うにんさん こんばんわ
>あれ〜?先頭一致や部分一致をしたいだけなら、*を使わずに部分一致検索でいいはず、と思ったら
>&STR="B"
>検索 [商品名]{&STR},部分一致検索=先頭,終了状態=&実行リターン
>も可能であるべきだと思うのですが。(変数名に*は使えないので、構文解析上問題はないし)

全部ひっくるめて仕様?・・・

私はもっぱら悲しげさん仕様が多いですが、
一度、それがダメで
>検索 [A]_&文,終了状態=&OK
この手法にしたらうまくいった経験があります。

このことからいうと検索・絞込みの条件式は
後者のみ正式にフォローするということなのでしょうか?・・・

20193 現象その2 小林 2003/04/30-10:56
記事番号20170へのコメント
別のところで、使用している検索コマンドでの現象です。

検索 [項目値]_&文1,部分一致検索=しない,文字比較方法=自動,終了状態=&OK

で問題なさそうでしたが、&文1 に先頭および末尾以外に空白を含んだデータの場合、
  KD1084:比較式の形式に誤りがあります
が発生しました。

そこで、
検索 [項目値]{&文1},部分一致検索=しない,文字比較方法=自動,終了状態=&OK
または 検索 [項目値]{&文1},終了状態=&OK
としたところ、正常に検索します。

どちらの書式も使わなければならなくなりそうですね。
20194 Re:現象その2 悲しげ 2003/04/30-11:48
記事番号20193へのコメント
どもっ、小林さん

>検索 [項目値]_&文1,部分一致検索=しない,文字比較方法=自動,終了状態=&OK
>
>で問題なさそうでしたが、&文1 に先頭および末尾以外に空白を含んだデータの場合、
>  KD1084:比較式の形式に誤りがあります
>が発生しました。

これは経験あります。
空白のみならず、いわゆる演算子文字列(.%+-*/等)を含む場合でも発生した記憶があります。
ただ、その場合でも、二重引用符を正しく付けて且つ「部分一致検索,文字比較方法」の引数を
省略したらうまく動いた記憶があります(この記憶の曖昧さについては否定しませんが)。

なお、その場合でも(引数抜きの)

> 検索 [項目値]{&文1},終了状態=&OK
> 検索 [項目値]{&文1*},終了状態=&OK
> 検索 [項目値]{*&文1*},終了状態=&OK

は常に問題なく動いています、私の経験では。
20214 変数での比較式の指定 佐田 守弘 2003/05/03-13:45
記事番号20170へのコメント
このコメントツリーの全部を追試しているわけではないのですが、
どうやら文字列による比較式の指定についての問題の様なので、この点でのコメントをします。

検索ないしは、絞り込みでは、次の2つの書式があります。
【書式1】 検索(または絞り込み) [<項目名>]{<比較式>,<比較式>,・・・}
【書式2】 検索(または絞り込み) [<項目名>]_<文字列型変数名>

論議されている内容は、書式2に関するものですが、論点となっている部分をきちんと理解するには、
書式1についてしっかりと把握しておく必要があります。

詳しい事は私のサイト
 http://www.ne.jp/asahi/m.sada/kiri/KIRI5/EQUIV1.html
 (桐ver.5で書いておりますが、その後の桐でも変わりません。)
を参考にして頂くと良いのですが、ここではポイントのみ解説します。

検索などのコマンドに記述する比較式は、正式には以下の様に記述します。
 書式a:<比較演算子><比較値>:<比較方法>
  (例) ="Kiri":E
 書式b:<比較値><比較演算子>[]<比較演算子><比較値>
  (例) 20<[]<30
このうちの書式bは範囲を指定する時の比較式で、等しいないし大小を比較する時には、
aの書式を使います。

以上から分かる通り、正式に記述すれば、比較対象の項目名の後に大括弧を書き、
この中に比較演算子と比較値からなる比較式を列挙します。
しかし、比較式が1つの時には、大括弧を省略できます。また大括弧があって
比較演算子が等号の時には等号を省略できます。
つまり、以下の様な書式も略記として許されます。
 [名称]{"Kiri":E} [名称]="Kiri"

次に冒頭の書式2です。
このアンダスコア「_」を使う検索などの書式は、比較式そのものを変数で指定する場合に使う書式です。
一般的に言えば、比較演算子を含む複数の比較式記述を羅列する様な時に使います。

しかし、その値が比較演算子を含む比格式でなく、単純に比較値と比較方法を
記述した比較式の略記でも良いわけで、この時には書式1の記述と同じ事になります。

つまり、論議されている「アンダスコアをつけた場合とつけない場合」で同じになるのは、
文字列で与える比較式が、比較式が1つであり、比較演算子が等号である場合の
ケースではないかと思います。

佐田守弘(KS-00119)

戻る