みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Windows10でFMPro17Advanced使用しています。
一つのテーブルに3つのフィールドがあり、
①主キー【テキスト:UUIDを計算値自動入力】
②前キー【テキスト:一つ前のレコードの主キーを入力】
③順序【計算:Case ( IsEmpty ( 前キー ) ; 1 ; テーブル 前::順序 + 1 )】
リレーションシップを
テーブル前 テーブル
【主キー】ー[=]ー【前キー】
として、③順序を再帰計算で求めています。
このときに、109番目のレコードまでは③順序が計算されますが、
110番目のレコードは「?」になってしまいます。
Last edited by tkks (2021-01-23 21:50:19)
Offline
計算結果が保存されないので、そうなります。
計算値自動入力にするとかして、保存するようにします。
順序の結果は、
1から始まる単なるシリアル番号なのでは
Offline
himadaneeさん
③順序のフィールドタイプを数字に変更して、フィールド内容の全置換で、計算式を指定したらうまくいきました。
ありがとうございます。
Last edited by tkks (2021-01-22 13:41:48)
Offline
チポさん
積算のデータベースを作っていて、レコードの親キー、前キーを変更すると階層・順序をふり直してくれるようにしています。
親キーで階層、前キーで順序をそれぞれ再帰計算していたのですが、レコードが増えたら計算できなくなって困っていました。
Last edited by tkks (2021-01-22 13:35:05)
Offline
>順序をふり直し
結果を保存するように変えたら、キーの変更時には毎回全置換が必要ですので念のため。
親キーとは、#1の主キーの事ですか。
順序は、親キーが最後に編集された順になるようですので、
Evaluate ( "Get ( タイムスタンプ )" ; 親キー )
という計算式でタイムスタンプを持たせておけばいいのでは。または、UTCミリ秒 の方がいいかもしれません。
Last edited by Shin (2021-01-23 14:48:04)
Offline
himadaneeさん
トリガーかボタンで、再計算して全置換するようにスクリプトを実行してみます。
Offline
Shinさん
ソート解除すると主キーの作成順に並ぶわけですね。
質問の内容は順序についてだったので、テーブルのフィールドは3つでしたが、
積算のデータベースでは、テーブルに6つのフィールドがあります。
①主キー【テキスト:UUIDを計算値自動入力】
②親キー【テキスト:一つ上の階層のレコードの主キーを入力】
③前キー【テキスト:一つ前の順序のレコードの主キーを入力】
④階層【数字:フィールド内容の全置換計算式は、Case ( IsEmpty ( テーブル::親キー ) ; 1 ;テーブル 親::階層 + 1 )】
⑤順序【数字:フィールド内容の全置換計算式は、Case ( IsEmpty ( テーブル::前キー ) ; 1 ;テーブル 前::順序 + 1 )】
⑥ツリー【テキスト:フィールド内容の全置換計算式は、Case ( IsEmpty ( テーブル::親キー ) ; Right ( "00" & テーブル::順序 ; 2 ) ;テーブル 親::ツリー & "." & Right ( "00" & テーブル::順序 ; 2 ) )】
リレーションシップを
テーブル親 テーブル
【主キー】ー[=]ー【親キー】
テーブル前
【主キー】ー[=]ー【前キー】
として、④階層、⑤順序、⑥ツリー を再帰計算で求めています。
例えば
階層=1、順序=1 のレコードは ツリー=01
階層=2、順序=1 のレコードは ツリー=01.01
階層=3、順序=1 のレコードは ツリー=01.01.01
といった感じです。
親キー、前キーを変更することで階層・順序がかわるようにしていますので、
主キーについてはレコードと一緒に作成・削除されるのみで変更はありません。
今後の課題は、
①親キー・前キーをドラッグドロップで変更できるレイアウトにすること
②複数のレコードの親キー・前キーを一度に変更できるレイアウトにすること
といったところです。
Last edited by tkks (2021-01-23 21:48:29)
Offline
積算ですので、階層1が工事名、階層2が名称、階層3が明細ですか。
1積算ごとの管理は、さらに階層0があるのでしょうか。
その構造でしたら、表示順を変更するごとに、明細を抽出して、階層1、階層2、表示順でソートして、表示順をシリアル数で全置換してしまうのが簡単でしょう。
または、3階層のテーブルにしてしまい、表示などは明細テーブルのみで行なってもいいかと思いますが。
ドラッグ&ドロップは、 【リスト表示を、ドラッグ&ドロップで並び替え】 のサンプルが参考になると思います。上の構造がそのまま適応できます。
複数レコードの一括変更は、目的レコードを抽出できれば簡単です。
ウェブビューワーでの操作でも良ければ、ライジングサンさんの記事 が参考になると思います。ただし、FM19以降が必要です
Last edited by Shin (2021-01-25 11:24:22)
Offline
Shinさん
シリアルを全置換すると順に並んで未ソートでも良くなりますね。やってみます。
ドラッグドロップはやり方を参考にさせていただきます。ありがとうございます。
Offline
未ソートでしたらレコードID順(レコード作成順)に並びますので、ソートは必要です。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 526.71 KiB (Peak: 547.62 KiB) ]