みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ファイルメーカーPro6.0において日付フィールドの入力値自動化の計算値を利用したいのですが、新しいレコードを作成するたびに、日付フィールドの日付+7日(毎週)の日付が自動で入力できるようにしたいです。計算式を教えてください
最初の日付フィールドに2023/9/26(火曜日)と入力があったら、次に新レコードを作成した場合に、2023/10/3(火曜日)になるようにしたいです。
GTP系で調べてみましたが、下記の回答があり
”こんにちは。ファイルメーカーPro6.0において、新しいレコードを作成するたびに、日付フィールドの日付に7日(毎週)を加算する計算式を作成することができます。以下の手順に従って、計算式を作成してください。
データベースを開き、レコードを作成します。
「日付フィールド」を選択し、「オプション」をクリックします。
「入力値の自動化」タブを選択し、「計算値」を選択します。
「計算式の指定」ダイアログボックスで、以下の式を入力します。
日付フィールド + 7
「OK」をクリックして、ダイアログボックスを閉じます。
これで、新しいレコードを作成するたびに、日付フィールドには、日付+7日(毎週)の日付が自動で入力されます。
以上、ご参考になれば幸いです。
これをやると、再帰定義を起こすため、このフィールドは使用できませんと表示されます
以上宜しくお願いします
Offline
FM6はちょっとよく覚えてませんが、Xリレーションができないと思いますので、
固定値で「1」とかの計算フィールドを作って、それで自己リレーションして、関連レコードの最大値に+7する、とかでやるんじゃなかったかな。
> 再帰定義を起こすため、このフィールドは使用できません
上の手順どおりに作業しました?
計算フィールドにするのではなく、日付フィールドの定義のオプションで、入力値の自動化 を設定します。
Offline
日付フィールドになっています
もちろん手順通りおこないましたが、再帰定義がでてしまいます
Offline
別のレコードの同じフィールドを参照するので、単にフィールド名を書いてもだめでしょう。
関連フィールドか、集計値を使わないと...
> 新しいレコードを作成するたびに、日付フィールドの日付に7日(毎週)を加算する計算式を作成することができます。
これに、手順ガ抜けているのではないかと思いますが。何もないところから新規レコードを作ったら日付レコードは空白ですので、計算の意味がありません。ですから、新規レコード作成の前に、例えば肌存のレコードをソートして、日付が最大のレコードを選択し、いずれかのフィールドへ入っておき、その後新規レコードを作成します。
日付レコードには、自動入力で、最後に参照したレコード値 と、計算式で、日付フィールド + 7 (上書きを許可) を設定しておくといいはずです。
Offline
FM6の評価版を探し出してやってみましたが、「計算式で、日付フィールド + 7」は「再帰定義~」が出て設定できませんでした。
「既存のレコードをソート~」から新規レコード、フィールド設定までスクリプトで実行すればいいですね。
自動入力の「直前のレコード」と「計算値」は両方設定できますが、「計算値」が使われるのは直前のレコードがない場合だけのようです。
そもそも、
日付フィールドは入力値の自動化の前にはどのように入力されているのですか?
最初のレコードに2023/9/26が入力されて、
以後⁺7ごと入力したいというのなら、
Date (9 ; 26 ; 2023 ) + 7 * ( Get ( レコード番号 ) - 1 )
というような計算フィールドでいいのでは。
Offline
それは目からうろこですが、検索状態だとだめなので、やっぱり全レコード表示するスクリプトと併用するとかになりそうです。手作業でもいいか。
レコード番号の代りにレコード総数にするとかもありかな。
最初の日付が固定してなくて、あくまでも前回に+7するというだけの感じもしますが。
self が FM9 からなので、それまでは自動入力の自己参照ができなかったのかも。
そういえば、FM6で区分別シリアルをつけるときに、別のフィールドを経由させてごにょごにょしていた気がしますね。
どちらにしても、FM6はとんでもなく古いので、バージョンアップされてはいかがですか。変な動きをするのも確認されていますし。
そろそろOSが64ビットになるので、全く動かなくなりますよ。
Last edited by Shin (2024-01-15 09:18:14)
Offline
"最初の日付が固定してなくて、あくまでも前回に+7するというだけの感じもしますが"
まさにそのとおりで本来であれば、最初の日は固定されていません。例えばということで9/26にしました。
FM6のバージョンアップですが、したいのはやまやまなんですが、経費がでません。FMを少しだけ触れるのも
私だけになってしまい、会社的には動くのだから問題ないというスタンスで。
Offline
そもそも、
日付フィールドは入力値の自動化の前にはどのように入力されているのですか?Re:そのまんま2023/9/26です
最初のレコードに2023/9/26が入力されて、
以後⁺7ごと入力したいというのなら、
Date (9 ; 26 ; 2023 ) + 7 * ( Get ( レコード番号 ) - 1 )
というような計算フィールドでいいのでは。
Re:日付フィールドを2023/9/26と1レコード作っていれておいて、そのあとフィールド定義で計算フィールドに
変更するということでしょうか?または別フィールドを作成して、それが計算フィールドにするということでしょうか?
ちなみに日付フィールドから計算フィールドに無理やり変更して教えていただいた計算式をいれてみましたが動きませんでした。
フィールドがありませんとの表示で。
Offline
> 計算フィールドに変更する
これはダメです。
グローバルフィールドを作って基準となる日付を入力し、
計算フィールド、入力値の自動化で求める。
は可能です。
ご希望がよく分からないのですが、、
基準日があって、レコード順にそれに7を加えていく。
というのが私の方法です。
これは、全レコードを通してイレギュラーにはなりません。
また、
Get ( レコード番号 )
この部分は、条件によって
レコードID
レコード総数
などを使うこともできますね。
Offline
途中で基準日が変わることもあるかもしれないというか、そもそもテーブル全体で初期値があるというよりは単に前回の値に+7ということなので、
最後のレコードを検索して+7した新規レコードを作るスクリプトにするか、
固定値(1)でリレーションした関連レコードから最終値を取得して+7する計算値自動入力にするか
の方が要望に近いのではないかな。
として、、
FM6で自己リレーションできましたっけ?
古くて忘れました。
再起定義
って厄介でしたね、
大丈夫だから通してってPCに向かってよく言ってましたよ。
Offline
自己リレーションはできますね。
リレーションのソート指定ができないようなので、
「前回」の参照に工夫が必要かな。。
Offline
やってみました。リレーションにソートの指定は可能ですね。
なので、例えば計算フィールドone(計算式「1」)を作って、それで自己リレーションして、関連側を日付フィールドで降順ソートすると、「リレーション名::日付」で参照はできます。
が、それを使っても計算値自動入力にしようとすると「再帰定義~」といわれてしまいました。これは、あほですね...
スクリプトで
新規レコード
フィールド設定「日付;リレーション名::日付+7」
ならOKです。
最後に作ったレコードでなく、最新の日付に+7することになりますが、これでいいかな。
結局スクリプトが必要になってしまったので、リレーションは使わず
全レコード表示
レコードへ移動「最後」
フィールドへ移動「日付」
新規レコード
直前のレコードから挿入「日付」
とかの方がいいのかな。これは最後に作ったレコード+7になります。
この方法で最新の日付+7にするなら、レコード移動する前に「レコードのソート」が必要です。
余談ですが、FM6で「名前を付けて保存」するとデフォルトで「~~~(コピー)」という名前になるんですが、そのまま使うとリレーション定義でリレーション名=ファイル名なので名前に()が入っていて、計算式を定義できなくなりました。
ファイル名を変更すると、自己リレーションの関連ファイルは自動的に名前が変わりますがリレーション名は自分で変える必要がありました。
当時は当たり前にやってたはずなんですが、何もかも忘れてきてますね...
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 560.45 KiB (Peak: 580.98 KiB) ]