初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-01-22 13:09:30

tkks
Member

主キーを参照した順序の再帰計算が109番までしか計算できません。

Windows10でFMPro17Advanced使用しています。

一つのテーブルに3つのフィールドがあり、

①主キー【テキスト:UUIDを計算値自動入力】
②前キー【テキスト:一つ前のレコードの主キーを入力】
③順序【計算:Case ( IsEmpty ( 前キー ) ; 1 ; テーブル 前::順序 + 1 )】

リレーションシップを

テーブル前     テーブル
【主キー】ー[=]ー【前キー】

として、③順序を再帰計算で求めています。

このときに、109番目のレコードまでは③順序が計算されますが、
110番目のレコードは「?」になってしまいます。

Last edited by tkks (2021-01-23 21:50:19)

Offline

#2 2021-01-22 13:12:42

himadanee
Guest

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

計算結果が保存されないので、そうなります。
計算値自動入力にするとかして、保存するようにします。

#3 2021-01-22 13:18:55

チポ
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

順序の結果は、
1から始まる単なるシリアル番号なのでは

Offline

#4 2021-01-22 13:22:58

tkks
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

himadaneeさん
③順序のフィールドタイプを数字に変更して、フィールド内容の全置換で、計算式を指定したらうまくいきました。
ありがとうございます。

Last edited by tkks (2021-01-22 13:41:48)

Offline

#5 2021-01-22 13:32:42

tkks
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

チポさん
積算のデータベースを作っていて、レコードの親キー、前キーを変更すると階層・順序をふり直してくれるようにしています。
親キーで階層、前キーで順序をそれぞれ再帰計算していたのですが、レコードが増えたら計算できなくなって困っていました。

Last edited by tkks (2021-01-22 13:35:05)

Offline

#6 2021-01-22 18:11:34

himadanee
Guest

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

>順序をふり直し
結果を保存するように変えたら、キーの変更時には毎回全置換が必要ですので念のため。

#7 2021-01-23 08:56:01

Shin
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

親キーとは、#1の主キーの事ですか。
順序は、親キーが最後に編集された順になるようですので、
Evaluate ( "Get ( タイムスタンプ )" ; 親キー )
という計算式でタイムスタンプを持たせておけばいいのでは。または、UTCミリ秒 の方がいいかもしれません。

Last edited by Shin (2021-01-23 14:48:04)

Offline

#8 2021-01-23 19:37:47

tkks
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

himadaneeさん
トリガーかボタンで、再計算して全置換するようにスクリプトを実行してみます。

Offline

#9 2021-01-23 21:39:20

tkks
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

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

#10 2021-01-25 11:04:34

Shin
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

積算ですので、階層1が工事名、階層2が名称、階層3が明細ですか。
1積算ごとの管理は、さらに階層0があるのでしょうか。

その構造でしたら、表示順を変更するごとに、明細を抽出して、階層1、階層2、表示順でソートして、表示順をシリアル数で全置換してしまうのが簡単でしょう。
または、3階層のテーブルにしてしまい、表示などは明細テーブルのみで行なってもいいかと思いますが。
ドラッグ&ドロップは、 【リスト表示を、ドラッグ&ドロップで並び替え】 のサンプルが参考になると思います。上の構造がそのまま適応できます。

複数レコードの一括変更は、目的レコードを抽出できれば簡単です。

ウェブビューワーでの操作でも良ければ、ライジングサンさんの記事 が参考になると思います。ただし、FM19以降が必要です

Last edited by Shin (2021-01-25 11:24:22)

Offline

#11 2021-01-26 22:08:07

tkks
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

Shinさん
シリアルを全置換すると順に並んで未ソートでも良くなりますね。やってみます。

ドラッグドロップはやり方を参考にさせていただきます。ありがとうございます。

Offline

#12 2021-01-27 10:18:51

Shin
Member

Re: 主キーを参照した順序の再帰計算が109番までしか計算できません。

未ソートでしたらレコードID順(レコード作成順)に並びますので、ソートは必要です。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 526.85 KiB (Peak: 547.76 KiB) ]