みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
テーブルAで各フィールドに【名前】【住所】を入力すると、
テーブルBに同じ値がない場合は新規レコードでテーブルAの値を登録、
同じ値がある場合は登録しないという処理はどのようにしたらいいでしょうか。
Offline
名前と住所の両方にリレーションを結び重複判定する方法とCount()とPatternCount()を用いた方法が思いつきますが…
重複の判定は名前のみですか?住所ですか?両方?
Offline
「名前と住所の両方にリレーションを結び」もう1つ別のテーブルBのフィールドをレイアウトに配置しておけば、そのフィールドに入力することでテーブルBにレコードが重複なく作られます。
これが一番簡単だと思いますが、リレーションに使うのと「別のフィールド」が必要です。
名前と住所を入力した時点で一致するものがテーブルBにあれば、その既存のレコードの値が「別のフィールド」に表示されて、その場合はそこに入力するとBの既存レコードの修正になります。
(なので、修正させたくない場合は空欄の場合だけ入力可能にする必要があるかな)
リレーションなので、データに改行があると改行単位での重複判定になってしまいますが(A改行Bは、AとかB単独やA改行Cなどでも一致とみなされる)
名前はともかく住所の方は要注意ですかね
テーブルBに、ユニークなフィールド(主キーでもいい)を作っておきます。
名前と住所でリレーションしておき、テーブルAのそれぞれのオブジェクトに OnObjectSave トリガーを仕掛け、どちらも設定されているが、リレーション先のフィールドが見つからない、例えば、IsValid ( テーブルB::主キー ) が 0、ならば、テーブルB::主キーを Get ( UUID ) で設定する、というスクリプトを走らせるといいのかも。
Offline
Shin様
テーブルBに、ユニークなフィールド(主キー)を作り、
テーブルAの名前と住所とテーブルBの名前と住所をリレーションし、
テーブルAの名前と住所にOnObjectSave トリガーを仕掛けという解釈で合っていますか?
----例えば、IsValid ( テーブルB::主キー ) が 0、ならば、テーブルB::主キーを Get ( UUID ) で設定する
これは式をifで繋げるということでしょうか。
Offline
ウィン様
重複判定は両方です!
Offline
himadanee様
すみません、勉強し始めで、知識が追い付かず、、、
おっしゃっていることを調べてみます!
Offline
テーブルAとテーブルBを、氏名、住所でリレーションし、テーブルBのレコード作成を許可しておきます。
テーブルAの氏名、住所のフィールドに、OnObjectSaveトリガーで、次のスクリプトを走らせます。
If [ not ( IsEmpty ( テーブル::氏名 ) or IsEmpty ( テーブル::住所 ) or IsValid ( マスター::主キー ) ) ]
フィールド設定 [ マスター::主キー ; Get ( UUID ) ]
ウインドウ内容の再表示 [ キャッシュ結合結果を書き込む ]
End If
大きな懸念は、入力を間違った時に、間違ったレコードがマスター側にどんどん溜まっていくことでしょうね。
Last edited by Shin (2022-01-31 09:28:56)
Offline
Shin様
ありがとうございます。
早速いただいた方法を試してみると、「指定されたテーブルが見つかりません。」
とエラーが出るのですが、、、見たところテーブル名等の指定は間違っていないようですが・・
Offline
ファイル名かオカレンス名を変更したのなら、外部データベースの設定を変更します。
Offline
視点を変えて、、
テーブルAの入力が手入力だとして、
テーブルBに登録がある人を入力すると、二度手間になりますよね。
まず、
テーブルBにその人のレコードが有るか確認して、
なければ新規レコード作成し、
テーブルAのレコードを作る。
と考えたらいかがでしょう。
確認の方法は、
氏名の読みや、氏名でリストして、同一か見る。
等簡略できますね。
テーブルAの入力も、IDのみ入力で、
他はルックアップ等で省略できます。
Offline
Shin様
頂いたサンプルも検証してみましたが、
テーブルの氏名、住所フィールドにに他のデータを入れてみても、マスターに反映されませんでした。。。
Offline
ファイナルの前のファイルを上げてしまったようです。こちらで。
https://www.dropbox.com/s/dl6p48tivjehq … 2.zip?dl=0
Last edited by Shin (2022-02-01 15:51:31)
Offline
Shin様
ありがとうございます。
無事設定できました。
もし、項目を増やしたいときは、項目ごとにリレーションして以下のように追加していったらいいでしょうか。
試してみましたが、結果が反映されません。。
not ( IsEmpty ( テーブル::氏名 ) or IsEmpty ( テーブル::住所 )
or IsEmpty ( テーブル::会社名 ) or IsEmpty ( テーブル::メールアドレス ) or IsValid ( マスター::主キー ) )
Last edited by koma3 (2022-01-31 09:57:25)
Offline
チポ 様
ありがとうございます。
おっしゃっているやり方も、習得したいです。
できれば、そのことについて詳しく書いてあるサイト等ございましたら
教えていただけたら助かります。
Offline
If の中の条件は、データの照合に必須の項目だけにするべきでしょう。
それ以外の項目は、テーブルAのフィールドを、関連フィールドとして配置しておくといいのでは。
Offline
一例です。
テーブルBでグローバルフィールドを作り、氏名とリレーション。
このリレーションのポータルを配置。
グローバルフィールドに氏名を入力すると、
その氏名の一覧がポータルに表示されます。
目的のレコードがあればそのポータル行をクリックで
テーブルAにその新規レコード作成。
なければ、入力レイアウトに切り替えて、レコード作成、
テーブルAにその新規レコード作成。
テーブルAの入力は、BのIDのみを入力し、
他はリレーションでルックアップとか、
参照フィールドの配置でいいでしょう。
作り込めば、
ふり仮名入力で、一文字ずつリストを絞りこむ。
その入力も、50音ボタンをクリックで。
こんなのも可能ですよ。
Offline
Shin 様
なるほど、少しずつわかってきました。ありがとうございます。
チポ様
ありがとうございます。
まだまだ、そのレベルには考えがいかないので、教えていただいたことを
今の進捗に当てはめて、作りこんでいきたいと思います。
Offline
レベルの問題ではないですよ。
今やろうとしていることを、テーブルBでやればいいんです。
メリットがはるかに大きいですよ。
Offline
チポ様
テーブルBでグローバルフィールドを作り、氏名とリレーション。
このリレーションのポータルを配置。
グローバルフィールドに氏名を入力すると、
ーーーーーーーーーーー>ここまでは何となく理解しました。
その氏名の一覧がポータルに表示されます。
目的のレコードがあればそのポータル行をクリックで
テーブルAにその新規レコード作成。
なければ、入力レイアウトに切り替えて、レコード作成、
テーブルAにその新規レコード作成。
テーブルAの入力は、BのIDのみを入力し、
他はリレーションでルックアップとか、
参照フィールドの配置でいいでしょう。
ーーーーーーーーーーー>この部分がちょっとまだよくわかっていません。
やってみましたが、ポータルには何も表示されません。。。
Offline
リレーションの設定が正しくて、
グローバルフィールドに値を入れても
ポータルに表示されないのなら、その値のレコードがない。
ということです。
それで既存か新規かの判定ができます。
既存の氏名を入力してポータルに表示されないのなら、
何かが間違っていると考えられます。
Offline
作り込んで見ると、面白い動きになりました。新規レコードで、住所、氏名を入力してみてください。右のポータルからの入力も可能です。
https://www.dropbox.com/s/dl6p48tivjehq … 2.zip?dl=0
Last edited by Shin (2022-02-01 15:51:15)
Offline
チポ様
なんとか、テスト用の簡易的なファイルをつくり、
意味を理解しました。
これを応用していきたいです。
ありがとうございます。
Shin様
サンプルありがとうございます!
自分が作っているものに少しずつ付け足して、使わせていただきます。
Offline
ShinさんのサンプルでWhile()繰り返し関数使ってくるあたりがイケてますね。
なぜかg_氏名と住所が消えない…テーブルレコードに溜まってますね。gフィールドとして機能していないのはなぜなんでしょう。
Offline
グローバルフィールドは、キチンと消えていますよ。表表示で確認してみてください。貴方の想像を超えたコントロールが動いています。
新しいレコードへ設定して行っているので、レコードが増えてくるものですが。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 613.67 KiB (Peak: 630.58 KiB) ]