みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんばんは。FMP12Adです。
薬名のリストを作っています。「A」テーブルのフィールドに薬名のフィールド「a」を作り、ドロップダウン形式で選択もしくは追記できるようにしています。「a」の値一覧は「B」テーブルの「b」フィールドを用意しました。「a」のドロップダウンの値一覧に「b」を指定しています。
例えば、「a」の一覧にない薬名がある場合はそのままaフィールドにテキストを入力し、フィールドから移動したときに「b」に入力したテキストのレコードを追加して値一覧を更新することはスクリプトで出来ますでしょうか?もしくは「a」の内容を「b」で検索して見つからないときは「B』のレコードに追加することは可能でしょうか?
Offline
逆に、フィールドbにあるものは、必ずフィールドaにありますか。
Offline
「A::a」と「B::b」とで[=]リレーション、と同時にテーブルBへのレコード追加の許可も設定しておきます。
「A::a」フィールドExitした時のトリガスクリプト、
・If [関連レコード「B::b」が「無」なら]
・ フィールド設定 [B::b; 値:A::a]
・End If
で、新規薬名ならテーブルBに新規レコードを自動追加します。
これを受けて、値一覧の内容も自動更新されます。
Offline
>>#2
ありがとうございます。bにあるものはaにあるかと思います。
>>#3
なるほどそのようにすればいいのですね。
ということは、実はaフィールドはAテーブルのレコードの加減で同じ仕様のフィールドが14個あるので、「B::b』とのリレーション、トリガスクリプトをAテーブルのそれぞれのフィールドに設定してやればいいですね。
あ、ということはスクリプトはそれごとにいりますかね?
Offline
フィールド設定 [A::グローバルフィールド; 値:Get ( アクティブフィールド内容 )]
としてグローバルをリレーションに使うと、1つで済むかな?
ExecuteSQL関数でリレーションの代替ができるので、式を汎用を考慮して抽象化すれば1本の計算式で代替できます。
同じようにトリガスクリプトも汎用スクリプトを組めば1本のスクリプトで済みます。
Offline
>>#5
ありがとうございます。なるほど、試してみます。
Offline
>>#6
ありがとうございます。ExecuteSQL関数がまだよくわかってないのでとりあえず、tunerさんの方法を試してみようと思います。
Offline
すいません。一つ教えてください。
スクリプトを作っているのですが、「If [関連レコード「B::b」が「無」なら]」このスクリプトステップの作成方法がいまいち分かっていません。
計算式にどのように入力すればいいのでしょう?
Offline
「If [関連レコード「B::b」が「無」なら]」このスクリプトステップの作成方法がいまいち分かっていません。
計算式にどのように入力すればいいのでしょう?
Count(B::b)=0 とか
Offline
If [Count(B::b)=0]
とか
If [not IsValid(B::b)]
無条件にフィールド設定しても、同じ値で書き換えるだけなので、あんまり問題ないかも。
皆さんありがとうございます。
無事できました。
参考のため僕の書いたスクリプトトリガ記載しておきます。
1.Aテーブルにグローバルフィールドを作りBテーブルのbフィールドとリレーション
-スクリプト-
フィールド設定[A::グローバルフィールド;値:Get(アクティブフィールド内容)]
if[Count(B::b)=0]
フィールド設定[B::b;値:A::グローバルフィールド]
レコード確定
end if
でできました。一応Bテーブルのソート方法なども考えていかないといけませんが使用環境がMacとWin両方で使用するため、ふりがなでもIMEとことえりの問題があるので何か別の方法で実現しようかと思案中です。
Offline
Pages: 1
[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 521.72 KiB (Peak: 526.26 KiB) ]