みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも大変お世話になっております。
バージョン19.4.2.204になります。
日付のフィールドと、数字が1ずつ増分の自動入力のシリアルナンバーのリレーションで
計算フィールドで、自動生成の番号のフィールドを作成しています。
計算フィールドですので、検索にヒットするのが遅いです。
この検索を早くしたく、フィールドをテキストに変更し、計算値を自動入力に変更したりしたのですが、
過去のレコードを削除した場合(誤入力などでレコードごと削除)、日付を変更した場合に、番号が変わります。(削除した分番号がマイナスになる)
レコードを削除しなければ、問題ないのですが、現実的にレコードは削除するような仕様にする予定ですので、なにか解決策はございますでしょうか?
何卒よろしくお願い致します。
計算だからでなく、索引が保存されてない(できない)からですね。
過去のレコード削除で削除した以外の番号が変わるのは、計算フィールドにしている現在の問題点で、
自動入力にすれば変わらないはずですが...新規レコードの(次の予定の)番号が変わるという意味?
日付ごとの連番であれば、
「日付を変更した場合に、番号が変わります。」
これは必要なのでは?変わって困るなら日付は変更できないようにしないといけないでしょう。
日付ごとに1レコードのテーブルを作って、そこに連番の次の番号を保存しておく必要があるでしょう。
確定されたレコードの編集、削除をスクリプトでのみできるようにして、
そのスクリプトで番号の振り直しを行えばいいのでは。
Offline
himadaneeさん
おっしゃるとおり、検索が遅い計算フィールドをやめて、テキストフィールドの計算値を自動入力の使用にしますと、削除した後に、すでに作成していたレコードの日付を変更すると、番号が変わってしまいます。
ひとつ削除していた場合ですと、ひとつ番号が若くなります。
日付ごとに1レコードのテーブルを作って、そこに連番の次の番号を保存しておく必要があるでしょう。←申し訳ありません。ここが私の知識ではあまり理解できず、もう少し掘り下げてご教授願えますでしょうか?
チポさん、ありがとうございます。
レコードの削除、編集で番号の振り直しを行うというのはイメージできますので、こちらをやってみようと思います。
ひとまず、計算フィールドのままだと検索が遅いのて、いずれにせよテキストフィールドに、自動計算値にする方向にしようと思います。
この番号で検索することがとても多いので、検索が早いのは必須条件なのですが、番号が変わってしまったり、重複したりするのも避ける仕様にしなければなりません。
上記の不明点、何卒よろしくお願い致します。
よろしくと言われても、具体的な番号のつけ方がわからないのでこれ以上は何とも...
「番号が変わってしまったり、重複したりするのも避ける仕様にしなければなりません」なのに
「レコードの削除、編集で番号の振り直しを行うというのはイメージできますので、こちらをやってみようと思います。」というのは
全く矛盾していて、何をしたいのかわかりません。
日付のフィールドと、数字が1ずつ増分の自動入力のシリアルナンバーのリレーションで
計算フィールドで、自動生成の番号のフィールドを作成しています。
これの意味は、日付ごとの連番じゃないんですか?(同じ日付でシリアルナンバーが若い者の数を数えて番号を生成)
例えばそれを計算フィールドからテキスト自動入力に変えた場合、
「2022-05-17-004」のレコードがあったとして、この「すでに作成していたレコードの日付を変更」したら
「2022-05-18-001」とかになるわけで、「ひとつ番号が若くなります」とかいう問題じゃないですよね?
そもそも、どのような検索をしているのですか。その日毎+シリアルは固定されていないので、普通は検索条件にしないでしょう。
レコードの削除、追加で番号の振り直しは簡単ですが、一番面倒なのが、日付の振り直しです。
Offline
申し訳ありません。
テーブル1 テーブル2
(作成時に1ずつ増える) 【シリアルナンバー】>=【シリアルナンバー】
Year(日付)*12 + Month(日付) 【年月】 =【年月】
という自己リレーションをしまして、
テーブル1に
【3桁】SerialIncrement ( "000"; Count ( テーブル 2::シリアルナンバー))というフィールドを作成しています。
これを組み合わせて、
【番号】Mod ( Year (日付); 100 )* 100 + Month ( 日付) & "-" & 3桁
というフィールドを作成しています。
これにより、2204ー001、2204-002といった数字(フィールドタイプはテキスト)を表示させています。
日付は基本的には空欄不可にしているのですが、この日付が、例えば5月から6月に変更するといったことはあります。
検索が遅いことが判明した時に、テキストフィールドに変更し、計算値自動入力に変更し、検索は早くなったのですが、レコードを削除したり、日付を変更したりした際に、番号が重複してしまったり、といったことが起きてしまいました。
説明不足で申し訳ございません。
こちらで大丈夫でしょうか?
他になにかベターな方法あればご教授お願い致します。
何卒よろしくお願い致します。
そのテキストの構造は予想していた通りですが、それをどのように検索しているのですか。2204 で検索、とか?
Offline
Shinさん
ありがとうございます。
実際には、この中に2204-001の中に、さらに所属の番号が入り、
2204-3-001といった番号になりますので、
2204-3といった感じで検索します。
2022年の4月の所属番号3の人間の売上一覧を表示といった具合です。
何卒、ご確認よろしくお願い致します。
それなら、
日付と所属フィールドをand検索すればいいことでしょう。
Offline
あえて複雑にコーディングした情報で検索するより、日付と所属番号で検索すればいいのでは。検索速度は常に最高になります。
Offline
チポさん Shinさん
ありがとうございます。
and検索の方向で考えようと思います。
ありがとうございました。
Pages: 1
[ Generated in 0.008 seconds, 12 queries executed - Memory usage: 541.65 KiB (Peak: 562.19 KiB) ]