FileMakerメディア管理。今回は追加のインポートについてです。
FileMakerではときどき「えっ。何でこんなことができないの?」っていう欠落(と感じること)があります。インポートのオプションに「一致しないレコードのみ追加する」がないこともそのひとつ。これがないせいでみんな大層困っています。困っていませんか?そうですか。私は困っていました。
追加のみインポートする話をこれからしてきますが、インポートはフォルダから行うことを前提にしている節があります。フォルダからであること即ちインポートするのがメディアファイルやパスだったりしますので、そういう話に振れています。
メディアやパスでなくても理屈は同じなのですが、これを書いた当初「メディア管理大前提脳」になっていて話が伝わりにくかったかなと反省したので、余計な部分を切り落とし、大幅に書き換えております(2023年初春)
では行きます。
インポート
インポートのダイアログには、「一致しないデータを新規レコードとして追加する」というオプションがあります。
照合フィールドで一致するレコードがなければ新規レコードとして追加してくれます。が、一致するレコードがあれば上書きしてしまいます。既存のデータに手を付けず一致しないデータだけを新規で追加することができません。そのような選択肢は用意されていません。なんてこったい。
長年、インポートダイアログは謎と不穏に満ちていました。「追加」以外の選択をしてまともな挙動になった試しがありません。大抵せっかくの既存データが上書きされてしっちゃかめっちゃかになります。それで、インポートダイアログの操作はトラウマとなり、ずっと逃げていました。
FileMkerの新しいバージョンでこのダイアログが改善されたと聞いて、やっとまともになるかと期待しましたが、見た目がちょっと変になっただけで不穏機能の怪奇は同じまま何の改善もありませんでした。寧ろややこしさに拍車がかかっただけとも言えます。
インポートダイアログの謎
そんなわけで本題の前に冷静にこれが何なのかを改めて見ていきたいと思います。
追加 … 追加は最も簡単で安心、判りやすい選択です。問答無用に追加します。普通、インポートして追加すると言えばこれを指します。
対象レコードで一致するレコードを更新 または 更新 … 照合フィールドを調査して同じデータがあれば問答無用にすべてのフィールドを上書きします。もし同じデータがなければ新規に追加するチェック項目があります。
対象レコードの既存レコードを更新 または 置換 … インポートするデータで置き換えるということですが、これについて私は理解できておらず、何を目的に何をするものであるか、まるで判りません。
テスト的に使ってみたことはありますが何が起きたのかよくわかりませんでした。
ということで以上ですが、選択肢足りなくないですか?
足りない選択肢
照合フィールドを見て、既存レコードがあるなら何もしない、なければ新規に追加 という選択肢がありません。最も需要がありそうに思えますし、自分は常にこれを望んでいました。でもその選択はありません。何とかする方法ないでしょうか。
[追]「入力値の制限」による追加のみインポートについて
「追加のみインポート」について、コメント欄で貴重な情報をいただきました。照合フィールドのオプションによって、それが可能ということです。
管理>データベースで照合に使いたいフィールドのオプションで、
入力値の制限>必要条件のユニークな値にチェックを入れた上で、
このフィールドの入力値を制限するを「常時」にしてください。
さっそくいろいろとテストしてみました。上手くいったりいかなかったりしました。私の理解力と実施テスト数がまだ足りなさすぎて、機能を掌握するに至っていません。今後も精進を続けます。
ここでは、当初の通り話を続けます。貴重な情報をありがとうございました。
追加のみインポート
追加のみインポートする方法、強引に行くしかありません。その方法は多分こうです。
ダミーの作業用テーブルを作成して必要フィールドを配置する
新規に作業用テーブルを作成し、ダミーとして使います。メインのテーブルでインポートを必要とするフィールドを再現します。
例えばこんなテーブルがあったとして、オブジェクトやファイルパスなどインポートしたいフィールドを作業テーブルにも作ります。
そしてメインテーブルと作業テーブルをリレーションしておきます。インポートファイルを特定できて一対一で繋がるフィールドを照合します。
最初のステップは作業用テーブルにインポートで「追加」します。不穏な他の選択肢を使いません。シンプルに何も考えずごっそり全部追加します。
作業用テーブルを絞り込んで、それからメインに転記する
次に、メインテーブルと今追加した作業用テーブルを比較して重複しているレコード(つまりメインテーブルに既存)を削除し、必要なレコードを絞り込みます。
そしてメインテーブルに転記します。そうそう。リレーションの設定ではメインテーブルにレコード作成を許可しておきますよ。
メインへの転記の手順ですが、最初メインテーブルにレコードがないので一括置換が使えません。ですので転記の際は、最初に何か一つでもいいので、ループでフィールドに入力してレコードを作成します。
一旦作成すれば他のフィールドは一括置換で転記できます。
他の方法としては、インポート > ファイルで自分自身を指定し作業用テーブルからメインテーブルにインポートするというのもあります。
どっちでもいいんですが、自分はループでレコードを作成してから一括置換の方法でやっております。
以上が「追加のみインポート」の基本の形です。ですが改善の余地があります。
追加のみインポートをさらに改善
作業用テーブルに全部読み込んでから必要なものだけ残してそれを改めてメインに転記して追加するという流れなわけですが、ここに問題点やか留意点がありますので、さらに工夫を凝らします。
問題: 全部追加すると時間がかかる上に無駄
作業用テーブルに一旦全部追加します。と書きました。ここですね。扱うのがテキストならいいですけどメディアファイルだったりしたら、インポートに時間がかかります。
フォルダ内に画像ファイルが1000点あって、既存のメインテーブルにすでに992点登録されているとしましょうよ。追加インポートしたいときに、1000のファイルを無条件に追加して、比較して992レコードを削除して8点だけ残し、メインテーブルに転記しますか。馬鹿馬鹿しいですね。処理に時間かかりますね。
解決: 作業テーブルに2度インポートする
解決するには作業用テーブルに2度インポートします。
第一のインポートでは軽くてユニークなフィールドをインポートします。メディア管理なら「ファイルパス」です。これなら早いですしね。そしてメインテーブルと比較して既存・重複しているレコードを削除します。
次に第二のインポートを行います。残ったフィールドをインポートで「更新」します。メディア管理ならここで初めてイメージとサムネイルをインポートします。
これにて作業用テーブルにインポートが完成しました。最後にメインテーブルに全部追加して完了です。
比較を容易に – チェックフィールド
メインテーブルと作業用テーブルの既存チェックですが、専用の計算フィールドを作っておくといいかもしれません。作業テーブル側から見て「メインに○○フィールドの内容があるかないか」あれば 1 なければ 0 みたいな。そういうフィールドがあれば、比較が一瞬でできます。
以上、追加のみインポートについてでした。この下はメディア管理に特化した少し細かい内容です。メディア管理や細かい話に興味がなければここまでで十分でございます。
メディア管理での追加のお話
ほんというと照合フィールドに「ファイルパス」不可
メインテーブルと作業用テーブルをリレーションするとき、ファイルパスを照合フィールドにすると上の方で書きましたが、厳密にはそれは不可です。正しくリレーションできません。
メディア管理でメインと作業テーブルをリレーションするには特定可能なユニークな値のフィールドを用意する必要があります。それはパスしかありませんが、それが不可なのでパスモドキを作ります。パスモドキとは”マイよく使うフィールド”で、ファイルパスの右から100文字です。 Right ( ファイルパス ; 100 ) です。細かい解説は割愛しますが、関連するポストのリンクを示しておきます。
FileMakerで正しくリレーションできない照合の問題、原因と解決【重要】
もうひとつ、第一のインポートでファイルパスだけをゲットし、第二のインポートで「更新」すると書きました。ここでも上記リンクに書いたことと同じ問題が生じます。ですので、第一のインポートでファイルパスに加えてファイル名もインポートし、その両方を照合フィールドに指定します。
メディア管理ではオブジェクトやサムネイルのチェックやエラー処理、そしてそもそも「追加インポート」が発生する条件や「何を以て追加と判断するか」など、多くテーマがあります。ここではこれ以上触れません。メディア管理の該当ページで続けます。
すでに誰かがお知らせしてたらスルーしてください。
管理>データベースで照合に使いたいフィールドのオプションで、
入力値の制限>必要条件のユニークな値にチェックを入れた上で、
このフィールドの入力値を制限するを「常時」にしてください。
これでインポート時にフィールドオプションONにすると照合フィールドにすでに値がある場合は弾いてくれます。
ただこの場合は複合での照合ができませんので、
照合項目が複数ある場合は、連結したフィールドを作成してそちらで照合するようにしています。
コメントいただいていたのに長らく放置してしまい申し訳ありません。重要な情報をありがとうございます。いくつかテストしてみました。少し複雑になると難易度が上がり、能力不足のせいで結局上手く使えませんでしたが、知恵を授けてくださって本当にありがとうございます。