みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
度々の質問申し訳ありません。
WinXP FM11adv 11server
Get(ソート状態)の戻り値の意味がわかりません。
僕のしようとしていることがGet(ソート状態)を使ってできるのか
アドバイス頂けると幸いです。
リスト形式のレイアウトがあります。
ヘッダに
「契約日」
「顧客名」
「住所」
というテキストがあり
ボタン設定をしてあります。
押した場所に該当するフィールドでソートをかけています。
ダイアログなしで昇順、でソートにしています。
が現状でして
希望は
ショッピングサイトのように一度押すと昇順、
もう一度押すと降順、
といった形にソートさせたいです。
「契約日」の昇順でソートされている状態でも
「顧客名」を押せば顧客名でソートされるのが理想です。
(「契約日」のソートは解除になる)
アドバイス頂ければ幸いです。
よろしくお願い致します。
Offline
Get ( ソート状態 )ヘルプ
http://www.filemaker.co.jp/11help/html/ … ml#1078672
• 「0」 - アクティブなテーブルのレコードがソートされていない場合
• 「1」 - アクティブなテーブルのレコードがソートされている場合
• 「2」 - アクティブなテーブルのレコードが部分的にソートされている状態(半ソート済み)の場合
私はソートさせるフィールド別にソート順を保存しておく(グローバル)フィールドを作り、その値が0なら昇順
1なら降順とルールを作りました。
ボタンを押すたびにその値をトグル(交互に入れ替え)させ、その値によってソートを昇順にするか降順にするかを
指定させました。
せっかくの関数ですが、どのフィールドでソートされてるかはわからないので、ボタンでソートした時に別途保存しておく必要があるでしょう。
ボタン以外の操作でソート状態が変わった場合にそれを自動検知するのは、難しそう。
> ソート状態が変わった場合にそれを自動検知する
最初のレコードのフィールド値を変数にして、
最後のレコードへ移動し、そのフィールドと比較。
これの大小で、昇順か降順か分かりますヨ
Offline
たとえば
新規レコードを最終行に作成して契約日に最新の日付を入力した状態とすると、
特にソートしてなくても(他のフィールドでソートしてても)契約日昇順ソート状態のように見えますよね。
この時に契約日ソートボタンが降順でソートしても気にならなければ、それでいいか。
表形式で我慢する!
私は嫌いだから使ってないけど。
Offline
みなさんご回答ありがとうございます。
結構ややこしい感じになるんですね
実は3フィールド上げたソート対象ですが
正確には7フィールドあります。
つまり関数やグローバルフィールドを使って常に
7フィールドを評価しておかないとうまくいかないということですか?
それって結構手間ですかね。
右クリックからのソートの方が無難ですかね・・・
Offline
私の前レスの方法なら、
グローバルフィールドは不要ですよ。
ソートするフィールドの数分スクリプトが必要になります。
また、複数のフィールドのソートは難しいですね。
Offline
あんまり速度が要求されなければ、非保存計算フィールドでソートするとスクリプトは1個でできるのでは。
まあ7個なら7個作った方が簡単ですね。FM12なら「右クリックからのソート」をスクリプトにできます。
ポータルでやってるhttp://www.russ.jp/stepbbs/step.cgi?mode=view&no=84118
を使って、ボタンでフィールド名とdirを設定します。
グローバルフィールド2個作る。
sort テキスト フィールド名または計算式を入れる
dir テキスト T+/T-/N+/N-の選択(テキスト順か数値順か・昇順か降順か)
計算フィールド3個作る。(sortnだけ結果数字、他は結果テキスト)
sortta 計算 非保存, = Case ( main::dir = "T+" ; Evaluate ( main::sort ) )
sortn 計算 非保存, = Case ( main::dir = "N+" ; Evaluate ( main::sort ) ; main::dir = "N-" ; - Evaluate ( main::sort ) )
sorttd 計算 非保存, = Case ( main::dir = "T-" ; Evaluate ( main::sort ) )
この計算フィールド3個でソートする(sorttdだけ降順)
どれか1つ以外は空欄なので順番はどうでもOK(これがみそ)
スクリプトを一つにするのも考えましたが、
フィールドタイプを考慮しないといけないのと、
スクリプトが長くなることを考えたら、、
ひとつのスクリプトをコピー・修正を繰り返せば済むことかと。。
Offline
>繰り返せば済む
でしょうねえ
昇順と降順で7x2個のソートステップを設定するのが面倒なら、右クリックで我慢ですね。
(FM12の「フィールド順でソート」も昇降は固定ですね...)
GetNthRecord(フィールド;1)<GetNthRecord(フィールド;Get(対象レコード数))
でも判定できるけど、どっちみち1ステップのボタンにはできないので、移動するのとあんまり違わないか。
この「フィールド」は、スクリプト引数に(して全体をEvaluateに)すれば、一本化できる。
> GetNthRecord(フィールド;1)<GetNthRecord(フィールド;Get(対象レコード数))
この方がスマートですね。
私のはこの関数がない頃のを引っ張っていました。
古いのをいつまでも引きずっている年寄りです(^^;;
> この「フィールド」は、スクリプト引数に(して全体をEvaluateに)すれば、一本化できる
GetFieldでもいいですね。
ソートまでは1つにできるんです。
しかしソートのフィールドを動的にできないので、
前述の様になっちゃうんですよね。。
Offline
検索するたびに未ソートに戻るのですが、常にソートをかけたままにすることはできるのでしょうか?
もし方法がありましたら、教えていただきたいです。
Pages: 1
[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 526.84 KiB (Peak: 547.75 KiB) ]