みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
スクリプトがうまく働かないので教えてください。
テーブルA
ID(自動番号入力)
作成月
テーブルB
ID
作成月
テーブルAで新規レコードが作成されて、IDフィールドが入力されたら、テーブルBにテーブルAのIDとテーブルAの作成月が
入力されるようにスクリプトを作りました。
テーブルAのIDフィールドに、スクリプトトリガ OnObjectExitを使って、
新規レコード作成
フィールド設定[ターゲットフィールド: テーブルBのID] 計算結果:テーブルA::ID
フィールド設定[ターゲットフィールド: テーブルBの作成月] 計算結果:テーブルA::作成月
もちろんテーブルAとテーブルBはIDでリレーションして、
テーブルBでのレコードの作成も許可しています。
このスクリプトだと、フィールドBへIDは入力されるのですが、
なぜかテーブルBの作成月に、テーブルAの作成月が挿入されません。
テーブルBの作成月フィールドは空白のままになっています。
なぜIDフィールドには計算結果が挿入されるのに、
作成月フィールドには計算結果が挿入されないのかが不明です。
もし分かる方がいれば教えていただけますか?
Offline
まず、
> フィールド設定[ターゲットフィールド: テーブルBのID] 計算結果:テーブルA::ID
は無駄ですね。
スクリプトが動く時点で、作成月が、まだ設定されていないのでは。でしたら、レコードの確定をしてから、コピーの動作に入ればいいかも。
また、根本的に、同じデータのレコードを作る必要があるのですか?
Last edited by Shin (2018-05-01 08:58:29)
Offline
> テーブルAのIDフィールドに、スクリプトトリガ OnObjectExit
IDフィールドは自動入力ですから、カーソルの出入りはないのでは。
また、
レイアウト切り替えしていなければ、
新規レコードはテーブルAに作られますが。。
Offline
Shinさん、チポさんが書かれている内容の Mix で答えのような。
[OnObjectExit]トリガによってスクリプト呼び出し
[新規レコード作成]でテーブルAに新しいレコードが作成される
※この際に自動入力でテーブルAの「ID」の値は設定される(空欄にならない)
[フィールド設定(テーブルBのID)]でテーブルBの「ID」にテーブルAの新しいレコードの「ID」が設定
[フィールド設定(テーブルBの作成月)]ではテーブルBの「作成月」に空欄が設定
※スクリプト内で作られたばかりのレコードなので値が入っていない
作成オプションをオンにしているのであれば
テーブルBの「ID」には実行時のテーブルAの「ID」が自動入力されるので[フィールド設定]ステップは不要です。
Last edited by Moz (2018-05-01 09:02:39)
Offline
テーブルAの「ID」は自動入力されるので、
テーブルAで新規レコードが作成されて、IDフィールドが入力されたら
このタイミング設定は適切ではありません。
「作成月」の有無に関係なく実行されてしまいますし、
OnObjectExit をトリガするためには無駄にフィールドにカーソルを入れなければいけません。
(自動入力されるIDが手入力で変更できるとしたらデータベースとしてNGですし)
Shinさんが上で指摘しているとおり同じ構成のテーブルが2つある必要性はないので
テーブルAとテーブルBの目的を詳しく書くか、構造の見直しが必要ではないでしょうか。
Offline
皆さま、ありがとうございます。
色々、自分でやってみて、
もう1度相談させてもらいたいです。
やりたいことは、
「テーブルAに新規レコードが作成されるタイミングで、スクリプトをかけて
テーブルBに新規レコードを作成し、テーブルAで自動入力されたIDをテーブルBのIDフィールドに挿入する」ということです。
テーブルAに新規レコードが作成されるとIDが自動入力されます。
テーブルAのIDフィールドにOnObjectExitをかけても、やはりカーソルの移動がないためか、
うまくテーブルBにIDが挿入されません。
レコードが作成されるタイミングで、別テーブルに新規レコードを作成し、
IDを挿入する方法はないでしょうか?
Offline
フィールドではなくレイアウトの OnRecordCommit 辺りでやってみては?
Offline
もう少し具体的な運用を書いてみれば。
普通は、別テーブルに 同じ ID を持つレコードを同時に作成する必然性は無いですよ。
あえて作ったそのレコードをどう使うのですか。
Offline
Shin様、ありがとうございます。
以下のトピックスのようなことをやりたいのです。
https://fm-aid.com/bbs2/viewtopic.php?id=7827
新規で入院してきた患者の書類を、入院テーブルにレコードが作成された段階で、
書類作成テーブルに同一患者の書類レコードを作成したいです。
そのため、同じ入院IDをテーブルAでもテーブルBでもリレーションで結んで、
運用したいです。
説明不足で申し訳ありませんでした。
Offline
その書類は、そのスレッドのように、月一などで作成されるものですか、それとも、1入院に1回作られるものですか。
Offline
Shinさんと同じ疑問ですが
> 新規で入院してきた患者の書類を、入院テーブルにレコードが作成された段階で、
> 書類作成テーブルに同一患者の書類レコードを作成したいです
「書類作成テーブル」とは何でしょうか?
書かれたことだけで考えれば、
入院テーブルのIDフィールドにトリガをかけて、
ID入力後に
書類テーブル::入院IDに入力することで出来ますよ。
リレーションの設定で、書類テーブルのレコード作成に許可を与えれば、
書類テーブルの新規レコード作成は無用です。
自動でレコードが作成されます。
Offline
ありがとうございます。
>「書類作成テーブル」とは何でしょうか?
すいません。
テーブルBのことです。
1患者毎に毎月1枚の作成が必要な書類です。
なので、月始めに入院している患者は、テーブルAにあるIDをテーブルBにインポートすることで解決しています。
しかし、月の途中で入院してくる患者は、テーブルAで新規登録された(新規レコード作成)段階で、テーブルBに新規レコードを作成してテーブルAのIDを挿入したいのです。
Offline
入院台帳の入院日に、OnObjectSave トリガーでも仕掛ければいいのでは。
書類管理は、入院管理番号で行った方が良いと思いますよ。
Offline
リレーションの設定で、書類テーブルのレコード作成に許可を与えれば、
書類テーブルの新規レコード作成は無用です。
自動でレコードが作成されます。
ありがとうございます。
無事にできました。
私のスクリプトの設定が間違っていました。
テーブルBで新規レコードを作成した後に、
フィールドAのIDをテーブルBのIDに挿入していました。
そのため、IDがうまく挿入されなかったのだと思います。
ありがとうございました。
あと、Shin様が言われるように入院日にOnObjectSave トリガーを仕掛けてうまくいきました。
この度はありがとうございました。
Offline
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 599.24 KiB (Peak: 616.15 KiB) ]