初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2022-04-09 15:07:12

nomunomu
Member

インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

アンケートフォームの集計をしています。使用バージョンは、FileMakerPro 17(Mac)です。

2〜3日おきにcsv形式の同じログをダウンロードして、「対象レコード内で一致するレコードを更新」「一致しないデータを新規レコードとして追加」でインポートするように設定しています。

このログはダウンロードのたびに、50件→100件→120件というようにレコード数は増加していきます。
すでに取り込んだレコードにはこちらで修正や加筆などをしているため、変更されたくないのですが、当然ながら、インポートで更新すると修正前のデータに戻ってしまいます。

また、投稿者本人が前のアンケートを修正したものを再度送ってくるケースもあるため、重複を検索して、古い方のレコードは削除しますが、インポートすれば復活していまいます。

よって、前回取り込んだところまでの最終データには変更を加えずに、新規のレコードだけを単純に追加するにはどうすれば良いでしょうか?

2回目以降のインポートでは分岐させて、別のテーブルに一旦取り込んでおき、参照させて合致しないものだけを取り込むという手法を取れば良いのでしょうか?

お知恵を拝借したく、お願いいたします。

Offline

#2 2022-04-09 18:11:24

himadanee
Guest

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

修正や加筆はインポートしないフィールドを作ってそっちすればいいのでは。

某役所でデータを改ざんしたら元データがなくてえらいことになってましたが、素のデータは残しておいた方がいいです。

#3 2022-04-09 18:20:10

Shin
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

> 前のアンケートを修正したものを再度送ってくるケース
これがあると、かなり面倒で、インポート元を絞り込むしかないですよ。

Offline

#4 2022-04-09 21:18:39

nomunomu
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

himadanee wrote:

修正や加筆はインポートしないフィールドを作ってそっちすればいいのでは。

某役所でデータを改ざんしたら元データがなくてえらいことになってましたが、素のデータは残しておいた方がいいです。


アドバイス、ありがとうございます。
csvの元データは改変することなくそのまま保存されているので、いざという場合には心配ないのですが、修正・加筆用の別フィールドを作れば、そのフィールドはインポートしても更新されないから問題ないということですね。ありがとうございました。

Offline

#5 2022-04-09 21:28:20

nomunomu
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

Shin wrote:

> 前のアンケートを修正したものを再度送ってくるケース
これがあると、かなり面倒で、インポート元を絞り込むしかないですよ。

そうですね。ありがとうございます。

最初の質問で書いた、「別のテーブルに一旦取り込んでおき、前回インポートしたレコードと参照させて合致しないものだけを取り込む」ということはできるでしょうか?
もしくは、前回インポートしたレコードの最後のシリアル番号を取得する方法があれば、それ以降を取り込むという命令は可能なのでしょうか?

Offline

#6 2022-04-11 08:56:28

チポ
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

インポートの照合フィールドはユニークですよね?

ならば、その制限の設定で
  常時・ユニーク
とするとインポートで書き換えらえません。

Offline

#7 2022-04-11 09:34:28

himadanee
Guest

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

インポートの方法を「更新」か「置換」にしないと「一致しないデータを新規レコードとして追加」が選択できないので、
ユニークだとしても既存レコードが更新されてしまいますよね?

照合フィールドは更新されてもいい(データは全く変わらないが、レコードの最終更新の情報が更新される)なら、
「対象レコード内で一致するレコードを更新」「一致しないデータを新規レコードとして追加<<しない>>」で、照合フィールドと何かどうでもいいフィールド(グローバルフィールドでも)をインポートして、
対象・対象外を入れ替え(これで更新されそうなレコードが対象外になる)
「対象レコード内で一致するレコードを更新」「一致しないデータを新規レコードとして追加」で、本来やりたいインポート(一致するレコードはなく追加だけ実行される)
とすればいいかな?

いったん別テーブルに入れるなら、「関連レコードへ移動」「対象外と入れ替え」「インポート」にすれば、一切更新されないでできるか...

#8 2022-04-11 09:40:25

チポ
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

「常時」
にすれば書き換えられませんよ。

インポートも単に新規レコード追加で取り込んでかまいません。

Offline

#9 2022-04-11 09:46:18

Shin
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

上書きを禁止すると、
> 前のアンケートを修正したものを再度送ってくるケース
で、ID が同じでしたら対応できないですね。
おそらく、完全に自動対応するのは難しいとおもいます。

Offline

#10 2022-04-11 12:33:55

nomunomu
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

チポ wrote:

インポートの照合フィールドはユニークですよね?

ならば、その制限の設定で
  常時・ユニーク
とするとインポートで書き換えらえません。

ありがとうございます!そんな方法があったのですね。
インポートの照合フィールドはフォームが自動的に振っている通し番号なのでユニークです。
この設定は、書き換えられたくないフィールドだけにフィードオプションの入力値の制限で「常時」「ユニークな値」を設定すれば良いのでしょうか?ユーザーによる上書きは許可のままにしています。

さっそくいくつかのフィールドに設定して試してみたところ、それらのフィードの内容を変更しても確かに上書きされなくなりました。また、削除したレコードは削除されたままになりました。
ところが、増えたはずの差分の新規レコードがインポートを実行しても追加されなくなりました。
さらに、一旦全レコード削除してから、再度インポートを実行してみると、本来の数より極端に少ない数しかインポートされなくなりました。

もう少しいろいろと試してみたいと思いますが、何か細かい調整が必要なのでしょうか?

Offline

#11 2022-04-11 12:40:05

nomunomu
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

Shin wrote:

上書きを禁止すると、
> 前のアンケートを修正したものを再度送ってくるケース
で、ID が同じでしたら対応できないですね。
おそらく、完全に自動対応するのは難しいとおもいます。

投稿者自身が個別のIDを持っているわけではないので、いくつでも投稿はできます。
名前とメールアドレスで重複があることが分かるので、新旧の投稿の自動調整については、それほど数は多くはないので、随時重複検索で対応したいと思います。

ありがとうございました!

Offline

#12 2022-04-11 13:20:57

チポ
Member

Re: インポートを繰り返す際に既存のデータは更新せずに差分の新規のレコードだけを追加する方法

常時・ユニーク
はインポートで照合するフィールドだけに設定します。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.014 seconds, 9 queries executed - Memory usage: 594.42 KiB (Peak: 610.96 KiB) ]