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

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

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

You are not logged in.

Announcement

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


#1 2016-06-02 06:59:44

やまほん
Member

採番で空き番を埋める

いつもお世話になります。
ver14です

これまで採番を運用するにあたり、空き番(欠番)があった場合でも
それを埋めることなく新規に最大値+1で採番してきました。
このような採番は問題なく作れて運用しております。

今回、採番時に空き番があれば(小さい値から)埋めるタイプが必要になりました。
自分なりに考えたり掲示板など見ましたが、埋めるタイプのヒントが見つからず。。。

1から運用上想定される上限の値をもたせた連番のテーブルを作って・・・とか
考えたのですが、このような採番をさせる方法にはどのようなものがあるのでしょうか?
なにかスマートなやり方があれば教えていただきたいのですが。

よろしくお願いします。

Offline

#2 2016-06-02 09:53:28

scripter
Guest

Re: 採番で空き番を埋める

次の番号へのリレーションを作って、番号の差が1でないものを検索する。

削除時に空き番を登録するようにしないと、どっちみち全レコードを小さいほうから調べる必要が出てくるんで、高速にできない気がする。

#3 2016-06-02 11:30:02

Shin
Member

Re: 採番で空き番を埋める

採番が、1から順番、という事でしたら、そのフィールドでソートしておいて、小さい方からレコード番号と一致しないレコードを探す、という作業で良いのでしょうね。レコード数が数千以内でしたら、順番に探してもさほど時間はかからないはずです。
レコード数がそれ以上の場合の、これを高速化した2分法での作例です。
https://www.dropbox.com/s/vb50e2t0o1o86 … 7.zip?dl=0
空き番が複数有る場合には、必ずしも小さい方を見つけるわけでは有りません。

Offline

#4 2016-06-03 14:12:26

やまほん
Member

Re: 採番で空き番を埋める

ありがとうございます。
レコード数としてはそんなに多くはなく、1000までと想定しています。
運用後どうなるかわかりませんが、レコード数は減る可能性のほうが高いです。100程度まで。
100程度なら繰り返しフィールドとかなにかを利用してもできそうな気もします。
挙げていただいたそれぞれの方法を一度検討してみます。

Offline

#5 2016-06-03 16:57:53

calcer
Guest

Re: 採番で空き番を埋める

1000ぐらいなら、SQLでいいかも。
indexがテーブル名、numが番号のフィールド名。
ExecuteSQL ("
SELECT MIN(t1.num)
FROM \"index\" t1
WHERE t1.num NOT IN (SELECT t2.num - 1 FROM \"index\" t2)
";"";"") + 1

#6 2016-06-04 09:00:05

Shin
Member

Re: 採番で空き番を埋める

100くらいなら、単にloopを回した方が簡単でしょうね。

Offline

#7 2016-06-04 18:05:22

やまほん
Member

Re: 採番で空き番を埋める

いろいろご教示いただいて光栄です。

まずは簡単にループでやってみようかと思います。
それで後々問題があれば別の方法でやってみます。
SQLもまだやったことがないのですが、機会があれば試してみます。

皆様ありがとうございました。

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: 511.33 KiB (Peak: 516.23 KiB) ]