みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
windows10にてFM18Proを使用しています。
我流でファイルメーカーを利用していますので初心者の域から抜け出せていないものです。
今回もこちらで質問させてください。
現在10名程度の利用での営業日報の作成を試みています。
テーブルを下記のように作っています。
A日報日付と担当者
B日報レコード
AとBをリレーションでつないでいます。
新規日報作成スクリプトを作り、ローカル変数で日付担当者を取得してそれをAのテーブルに入れようと思います。
この場合担当者営業1がすでにAで本日の日報の作成を行っていた場合スクリプトにて担当者と日付からテーブルに新規レコードを作る代わりにすでにAのテーブルの日付を利用してB日報テーブルのレコードを作っていく方法が良く分かりません。
スクリプト中に条件を記述すればよいのでしょうがそれ自体が不慣れなもので記述方法をご教授願いたいと思っています。
出来ればスクリプトの記述サンプルでもお教えいただければ幸いです。
以上の説明でわかるでしょうか?
宜しくお願いいたします。
Offline
リレーショナルデータベースの根本理論をもう少し勉強してください。
日報の日付は、日報の内容と一体になるもので、それが別のテーブルに存在するのは、根本的に誤っています。
日付を日報側に存在させるとして、日付をユニークに制限しておけば、同じ日付のレコードを作ることはできなくなります。
Last edited by Shin (2021-04-23 08:52:04)
Offline
フィールドが書いてないのでテーブルの構成がよくわかりません。
Aが担当者のマスタ、Bが日報、ということにすれば、
Aにグローバルフィールドで作成する日報の日付を入れて、Bの担当者(コード)と日付をリレーションしてB側にレコード作成の許可をしておいて、
AのテーブルのレイアウトでBのフィールドに入力するようにすれば、Bに関連レコードがなければ作成、あれば既存データの修正になり、特にスクリプトがなくても重複レコードの作成は自動的に不可能になります。
(実際には、日報入力用のレイアウトに切り替えるとか、今日の日付を自動的に入れるとかのスクリプトは作ることになるでしょうけど)
リレーショナルデータベースの根本理論をもう少し勉強してください。
日報の日付は、日報の内容と一体になるもので、それが別のテーブルに存在するのは、根本的に誤っています。日付を日報側に存在させるとして、日付をユニークに制限しておけば、同じ日付のレコードを作ることはできなくなります。
ご連絡有難うございます。
Aの中に日付と担当者のみを管理して同じ担当者が同じ日付で作成できないようにと考えたのですが、その方法が間違っていたようですね。
日付をB日報で持たせて制限をかけると同じ日付ではできないと思いましたがそうすると間違って同じ日付で日報を作成を始めた場合既存の日報にたどり着けないので悩んでいました。
Offline
フィールドが書いてないのでテーブルの構成がよくわかりません。
Aが担当者のマスタ、Bが日報、ということにすれば、
Aにグローバルフィールドで作成する日報の日付を入れて、Bの担当者(コード)と日付をリレーションしてB側にレコード作成の許可をしておいて、
AのテーブルのレイアウトでBのフィールドに入力するようにすれば、Bに関連レコードがなければ作成、あれば既存データの修正になり、特にスクリプトがなくても重複レコードの作成は自動的に不可能になります。
(実際には、日報入力用のレイアウトに切り替えるとか、今日の日付を自動的に入れるとかのスクリプトは作ることになるでしょうけど)
ご連絡有難うございました。
Aには日付と担当者のみ、Bに訪問先、時間、打合せ内容等のレコードを持たせています。
この方法で作成を行おうと思っていましたが、ご指示の通りですとリレーションの組み方で新規または修正追加が可能ということですね。
この方法がわからなくて、スクリプトにて同じ日付と担当者を検索してすでに同一の日付で担当者が存在したらそのレコードの修正追加、なければ新規にAに日付と担当者のレコードをもたせることを行わなければならないと思い質問させて頂きました。
上記のようにやってみようと思います。またわからなければ質問させて下さい。
有難うございました。
Offline
重複したレコードを作らない方法を
テキストフィールドを作り、
入力値の自動化で
担当者 & 日報日付
として、入力値の制限で、
ユニーク
とします。
インポート等でレコード作成の場合は、
制限で、さらに、
常時
とすれば重複したレコードは作製されません。
Offline
重複したレコードを作らない方法を
有難うございました。
こちらの情報も他で悩んでいたところです。
ご指導有難うございました。
Offline
フィールドが書いてないのでテーブルの構成がよくわかりません。
Aが担当者のマスタ、Bが日報、ということにすれば、
Aにグローバルフィールドで作成する日報の日付を入れて、Bの担当者(コード)と日付をリレーションしてB側にレコード作成の許可をしておいて、
AのテーブルのレイアウトでBのフィールドに入力するようにすれば、Bに関連レコードがなければ作成、あれば既存データの修正になり、特にスクリプトがなくても重複レコードの作成は自動的に不可能になります。
(実際には、日報入力用のレイアウトに切り替えるとか、今日の日付を自動的に入れるとかのスクリプトは作ることになるでしょうけど)
こちらの方法で試みましたが、うまく動作してくれません。
いろいろ試したのですが質問をさせて下さい。
現在Aにはフィールドが日付、担当者、Bに訪問先、時間、打合せ内容等のレコードを持たせています。
これにスクリプトでAに日付を入れています。また同じくBに担当者をスクリプトにて入れています。この状態でAのレイアウトからスクリプトを実行したところAにいくつも同じ日付のレコードが出来てしまいました。himadanee様の言うようにA日付とB担当者のリレーションは張っていますがどこがおかしいのでしょうか?
上記にAが担当者マスタとするとの理解を私が間違っているのでしょうか?
お時間があるときで結構ですご指南ください。
Offline
テーブルを考えるときに、
何を基準に1レコードとするか
を考えましょう。
日報なら、
担当者 & 日付
ごとに1レコードとして、これが重複しない。
と決めます。
また、同じ基準のテーブルを複数作らない。
これも鉄則です。
複数有るとそれらのテーブルの同期がとても面倒なことになります。
> Aが担当者のマスタ、Bが日報
Aに日付が有りますから、そのままでは担当者マスタになり得ませんね。
ここでの問題ではマスタは考えないでもいいでしょう。
ここで必要なテーブルは
上記の日報
だけで、
さらに作るとすれば、
各日報を日ごとにまとめたカレンダのようなものでしょうか。。
Offline
チポ様
ご教授誠に有難うございます。
お教えいただいた内容を私の取り組んでいるもので考えたところ、今後いろいろな内容を盛り込んでいくうえで大事なことに気が付かされました。始めたのがほかのプログラマからの移行で始まったのでその辺りはなかなかつつけていなかったです。
これから修正を行いながらデータの持ち方等で今後公開しないように変更を行っていこうと思います。
いかに同一日付で同じユーザーが日報を作成しないようにばかりを考えていたので頭が回りませんでした。
有難うございました。
Offline
現在Aにはフィールドが日付、担当者、Bに訪問先、時間、打合せ内容等のレコードを持たせています。
Aの日付はグローバルフィールドと書きました。入力する(表示する)日報の日付です。Bが日報テーブルなので当然そちらにも担当者と日付(これは日報データの日付)が必要です。
A::担当者=B::担当者
and
A::グローバル日付=B::日付
というリレーションです。
一般的には同姓同名に対応するために担当者はコード化します(担当者名でなくコードでリレーション)。公文書に連動しないなら本名でなくていいので、必ずしもコードは必要ないですが。
別にこのやり方にしないとできないわけではありませんが、重複しないデータをBに入れる目的からは、一番シンプルだと思います。
himadanee様
お教授有難うございました。
当方外出のためお礼が遅くなりました。
これで行ってみたいと思います。
またいろいろお伺いするかもしれませんがよろしくお願いいたします。
Offline
Pages: 1
[ Generated in 0.031 seconds, 8 queries executed - Memory usage: 553.65 KiB (Peak: 574.19 KiB) ]