みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
FMP13 Win7使用です。
フィールドの値を使用して値一覧を作成し、違うテーブルで使用するときに、レコード順ではなく勝手にソートされてしまっています。
ソートさせずにレコード順で表示させる事は出来るのでしょうか?
索引を使うので、必ずソートされます。
ソート順を指定するフィールドが必要です。(作成順ならGet(レコードID)など)
値一覧はソートを応用したその派生機能です。
ソート自体は値一覧に必須で外すわけには行きませんが、ソート条件の方ならば工夫により変えられます。
Offline
tim様 Hiro様
回答ありがとうございます。
tim様のいわれるようにフィールドを作成したらどこで設定すればいいのでしょうか?
こんな感じでしょうか。
http://pupld.net/07/140617/y3i72j6v8f/index.cgi
間違ってたらすいません。
脱初心者目指すもの様
お返事遅くなってしまい申し訳ありません。
ファイルまで頂いてありがとうございます。
そのやり方までは独自で行うことが出来ましたが、できれば数字が出なくしたいのです。
出来ないならできないでしょうがないと思っていますが、できるのであればご教授お願いします。
Offline
旅人様
ありがとうございます。
参考にさせていただきましたが、内容が難しくて理解が追い付いていない現状です。
どなたか少し噛み砕いて説明して頂けないでしょうか?
こちらのサイトにも同じ考え方の参考レスがあります。
● https://fm-aid.com/bbs2/viewtopic.php?id=1305
● https://fm-aid.com/bbs2/viewtopic.php?id=1145
Offline
>内容が難しくて理解が追い付いていない現状です。
私もですT_T
過去の発言を見てたら、自分でも忘れていたコメントがあったのでサンプルにしてみました。
こちらなら分かりやすいかも知れないと思って。
トリガも使ってるのでそれなりの制限もありますが。
http://pupld.net/21/140619/kd7i0uug1o/index.cgi
(List_Sort..fmp12)
Offline
横レスすいません。
旅人さん、こんな方法があるのですね!
Length関数とスペースも返すんですね、勉強になりました。
旅人様の値一覧の2番目フィールドを空白(スペース)にするスクリプトの代案なのですが、
こんな式でも大丈夫なのでしょうか?
Substitute (Left(1111111111111111111111(100文字まで);ID) ; 1 ; "半角スペース" )
http://www.filemaker.co.jp/help/html/create_db.8.9.html
テキストフィールドには、テキストとして使用する文字、記号、数字を約2 GB または 10 億文字まで保存することができます。
索引は、各単語または値の最初の 100 文字に基づいて設定されます.
そうか、計算式にするとトリガ要らないか。
Left ( " スペースたくさん" ; 順フィールド )
で良くない?
Offline
基本はそれでよかったんだけど、FM12で動的値一覧の場合にだめになって、いろんな方法が派生した。
10^n-1でn個の9が並ぶので、それをSubstituteすると「たくさん」書かなくていい
順番をスペースの数に変換(いわば「1進数」)
スペースの代りに見えない(文字幅のない)文字を使う(ソート順と第2フィールドを兼用可能)
複数の文字を使って記号化する(最初は「2進数」だったが「10進数」まで可能だった)
https://fm-aid.com/bbs2/viewtopic.php?id=1305
のHiroさんの式を使って
Substitute(
Right(Substitute(10^10-1;9;0)& Get(レコードID); 10) //最大桁数を10として
;[0;Char(8203)]
;[1;Char(8204)]
;[2;Char(8205)]
;[3;Char(8206)]
;[4;Char(8207)]
;[5;Char(8234)]
;[6;Char(8235)]
;[7;Char(8236)]
;[8;Char(8237)]
;[9;Char(8238)]
)
が簡単そう。
レコードIDが10桁に収まらくなったら、10を100までは増やせるけど、できるだけ小さくしておく。
皆様回答ありがとうございます。
旅人様に頂いたファイルがやりたいことそのままだったので作ってみます。
出来るだけ皆様が教えてくださったことを理解できるように頑張りたいと思います。
ありがとうございました。
横スレすいません。
解決済みかとは思いますが、すこし理解できなかったので・・・再度質問よろしいでしょうか?
質問1:
今回の希望順の数字を消して、なおかつ希望順に並ばせたい場合、
FM12始めたばかり様と旅人様が仰ってるのは、以下のファイルのような感じになるのでしょうか?
http://pupld.net/07/140621/d935lkbcri/index.cgi
それとも作り方間違ってますでしょうか?
間違ってなければ以下、2つはどちらも同じ結果になりました。また桁数の問題も出ませんでした。
*但し、桁数が多ければ多いほど、値一覧を選ぶ際に選択枠が横に広がるので、違和感が増えてくる。
まぁそんな場合まで、本件をどうしてもしなければならないかどうか?の議論は必要になってくると思いますが。。
Substitute (Left(1111(最大考えられる希望順:数字分):;希望順) ; 1 ; " " )
or
Left ( "最大考えられる希望順:数字分の半角スペース" ; 希望順 )
質問2:
himagine様の以下の計算式ですが、どのフィールドにどのようにすれば定義できるのでしょうか?
同じようにスペース計算式に設定してもうまくいかず、設定の仕方が分かりませんでした。
Substitute(
Right(Substitute(10^10-1;9;0)& Get(レコードID); 10) //最大桁数を10として
;[0;Char(8203)]
;[1;Char(8204)]
;[2;Char(8205)]
;[3;Char(8206)]
;[4;Char(8207)]
;[5;Char(8234)]
;[6;Char(8235)]
;[7;Char(8236)]
;[8;Char(8237)]
;[9;Char(8238)]
)
質問3:
私の場合、添付の
案件レイアウト(テーブル)側で、社員テーブル値一覧を呼び出し、
関連する社員テーブル側のフィールドを配置する場合、社員IDでリレーションを貼るのですが
今回の場合、社員名でしかリレーションをはれないと思うのですが
特に社員IDのときと同様、問題ないのでしょうか?
あっユニークでないと問題か?
---
解決ずみなのに、すいません。
お暇なときで結構ですので、お教え頂けますと幸いです。
1.順位分の「1」をスペースに置き換えても後半の1は残りますから値一覧の枠は拡がります。
2.その式の計算フィールドを作って2番目の値でソートに使います。
3.意味がよくわからない。添付ファイルのIDって案件IDですよね。
Offline
【目標】
● フィールドの値を使用して値一覧を作成し、違うテーブルで使用するときに、レコード順ではなく勝手にソートされてしまっています。ソートさせずにレコード順で表示させる事は出来るのでしょうか?
● そのやり方までは独自で行うことが出来ましたが、できれば数字が出なくしたいのです。
【定石手法】
基本は、値一覧の2番目表示フィールドに「順位付けフィールド」を指定、さらにこの2番目フィールドで「ソート」を設定する。
不可視化は、従来(質1.)順位付けフィールドに「半角スペース文字」を順位番号数分の文字列挙(1進数値変換)してましたが、
さらに進化効率化して(質2.)「ゼロ幅スペース文字」10種文字を効果的に(10進数値変換)適用することで、完全不可視化・無スペース化、順位付け数値の桁数無限化(レコードID、日付ID番号など大きな数値)、文字数最小化・文字列ソート負荷軽減化を実現します。
・本事例では、順位はレコード順なので、希望順フィールドは特に無くとも Get(レコードID) 計算で求まります。
・不表示でも表示枠が広がるのは、「ゼロ幅スペース文字」で解消。
・数値分の文字を列挙するのは百文字程度が索引のソート限界。0~9の数字を10種のゼロ幅文字へ置換えて文字変換ソートするのが最善でしょう。
「順位付けフィールド」の最新手法式例、( ※ ゼロ幅文字列でのソートはフィールドの索引言語を 日本語→unicode へ設定変更すること )
Substitute(
Right(Substitute(10^6-1;[9;0]) & Get(レコードID); 6) //レコードIDの最大桁数は6桁もあれば十分として、ID 000001~999999
;[0;Char(8203)];[1;Char(8204)];[2;Char(8205)];[3;Char(8206)];[4;Char(8207)]
;[5;Char(8234)];[6;Char(8235)];[7;Char(8236)];[8;Char(8237)];[9;Char(8238)]
)
Last edited by Hiro (2014-06-21 18:34:46)
Offline
Hiro様のこの関連記事読んでトライしてましたが、
なぜか「あいあい?」のような一行リストになって
頭抱えてました。恥ずかしながら、大事なこと見落としてました。
データの格納→デフォルト言語→Unicode
皆さま、このチェックお忘れなく!!
旅人様、1・2について出来ました。ありがとうございます。
3は私の説明不足でしたので、スルーで結構です。
Hiro様、FM12始めたばかり様の仰るとおりにすると、枠も広がらず出来ました!
なにがどうなってこうなるのか計算式をみても分かりませんが、関連記事もみて勉強したいと思います。
案件側で社員IDでリレーションした場合も組み合わせで出来たので、助かりました。
社員IDを入力する値一覧で社員名を表示したければ、2番目ソート用計算フィールドの後ろに社員名を連結します。
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 562.09 KiB (Peak: 582.99 KiB) ]