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

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

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

You are not logged in.

Announcement

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


#1 2024-01-22 12:59:37

tomomon
Member

WebDirectで別テーブルにレコードを移動する方法について

お世話になっております。

FileMakerのver.18にてWebDirectの環境を使用して、
テーブルAからテーブルBに複数のレコードを移動したいのですが、
良い方法はありますでしょうか。

いままでは各端末にファイルメーカーをインストールしていたので、
レコードのインポートをスクリプトで行い実現していましたが、
WebDirectのみを用いて運用することとなりました。

ルックアップを利用すると良いという記事もあるのですが
想像がつきません。お知恵をお借りできれば幸いです。

1、各テーブルは固有のIDでリレーションシップを貼っています。
2、移動したいデータの項目は20個ほどあります。
3、同時に移動したいレコードは30程です。

よろしくおねがいいたします。

Offline

#2 2024-01-22 13:15:20

himadanee
Guest

Re: WebDirectで別テーブルにレコードを移動する方法について

「サーバ上のスクリプト実行」でCSVにエクスポートしてインポートするだけでよかったような。どっちもサポートされてます。

#3 2024-01-22 13:25:33

tomomon
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

ありがとうございます。そういった方法があるのですね。
クライアント側にファイルを残せないので、他の方法はないでしょうか(使用する人間に作業させるとミスが発生することもあるため)。

個人的には、クラリスの公式にある以下の方法をとりたいのですが、よく分からなくて困っています。

https://support.claris.com/s/article/ある … anguage=ja
方法 2:リレーションシップ
データベース間のリレーションシップを設定し、ルックアップフィールドを作成するという方法でフィールドに保存されている情報を他のデータベースに移動することができます。
ルックアップを実行すると、他のテーブルのデータが現在のテーブルのフィールドにコピーされます。コピー後のデータは、現在のテーブルのデータとなります(コピー元のテーブルにもデータが残ります)。
ルックアップを行う際のテーブル間の関係を設定するには、現在のテーブルの照合フィールドと関連レーブルの照合フィールドとの間のリレーションシップを作成する必要があります。リレーションシップを設定したら、ルックアップを定義して、関連テーブルのデータを現在のテーブルのフィールドにコピーします(FileMaker オンラインヘルプの「ルックアップの定義」を参照してください)。
現在のテーブルの照合フィールドに値を入力したり、照合フィールドの値を変更した場合、FileMaker Pro は設定されているリレーションシップを使って関連テーブルを参照し、照合フィールドに同じ値が入力されている最初のレコードを検索します。次に、ルックアップ元に設定されているフィールドの値をルックアップ先のフィールドにコピーします。値は、そのフィールドに保存されます。
ルックアップ先のフィールドにコピーされた値に対しては、他の値と同様に編集、置換、削除などの処理を行うことができます(ルックアップで取得した値は、現在のテーブルの値となるという点に注意してください)。さらに、現在のテーブルのデータを関連テーブルのデータに一致するように更新することもできます。

Last edited by tomomon (2024-01-22 13:37:14)

Offline

#4 2024-01-22 13:45:41

Shin
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

ファイルの構造によりますが、
> 1、各テーブルは固有のIDでリレーションシップを貼っています。
から考えると、そのID のみを取り込めばいいのでは。それぞれのテーブルでデータが独自に編集されていくのでしたら、ルックアップでデータを自動入力させればいいでしょうね。
ID は。移動させるデータを対象にしておき、IDを一覧にする集計フィールドでテキスト列として取り込みます。そのIDをLoopで取り込み先で設定していけばいいでしょう。
または、元テーブルで、リレーション先のテーブルのIDをLoopで設定していってもいいでしょう。(大量ですと時間がかかりますが、30レコードくらいでしたら一瞬でしょう)

ただ、それぞれでデータが編集されないのでしたら、そのデータを移動させる意味がありませんね。IDのみを移動させればいい話のはずです。

Offline

#5 2024-01-22 14:13:54

tomomon
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

Shinさん
ありがとうございます。

テーブルBはテーブルAのバックアップ 兼 テーブルAからのポータルを利用した参照先(以下の表では社員IDで繋がっている)となっています。
実は固有IDはテーブルBでは厳密な意味の固有ではなく、リビジョンがある場合に重複するあることがあります。

テーブルA
固有ID, 社員ID, データ_1, データ_2, ...
211,  社員ID_1, DETA211_1_1,  DETA211_2_1,  ...
212,  社員ID_2, DETA212_1_1,  DETA212_2_1,  ...

テーブルB
固有ID, データ_1, データ_2, ...
111,  社員ID_1, DETA111_1_1,  DETA111_2_1,  ...
112,  社員ID_2, DETA112_1_1,  DETA112_2_1,  ...
112,  社員ID_2, DETA112_1_2,  DETA112_2_2,  ...

このような形になっていますが、作業が完了したテーブルAのデータを
テーブルBに移動させて、他の人が簡単に触れないようになっています。

いままではテーブルAをインポート/吐き出したレコードは削除することで、
テーブルBにすべてのレコードを移動していました。

どうしてもこのようにデータを移動するような形でのルックアップの作り方が想像できず、
(固有のIDのみ取り込む という操作がわからない..)
なにかサンプルなどあるところがあれば教えていただけないでしょうか。

Last edited by tomomon (2024-01-22 14:16:22)

Offline

#6 2024-01-22 15:16:50

himadanee
Guest

Re: WebDirectで別テーブルにレコードを移動する方法について

「サーバ上のスクリプト実行」ですから、処理は全部サーバ側で行ってクライアント側には何も残りません。csvファイルはサーバ上のテンポラリフォルダに一時的に作られるだけです。
でもレコードIDのリストを作って引数で渡す処理は必要なので、「~だけ」というほどシンプルではなかったですね。
Shinさんの方法の方がデバッグがしやすいかな。ループするのは対象レコードを1つずつ移動してもよさそうだし

#7 2024-01-22 15:31:54

Shin
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

テーブルBはテーブルAのバックアップ 兼 テーブルAからのポータルを利用した参照先ならば、テーブルAで入力作業を行うこと自体が無駄な作業でしょう。
どうしてもテーブルA のレイアウトで行いたいのでしたら、IDのみのフィールドからテーブルBへリレーションを張り、ポータルの空白行のみを表示する様にフィルターしておきます。そこに入力させれば、レコード移動は不要です。

Offline

#8 2024-01-22 15:47:37

tomomon
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

Shinさん
ご指摘ありがとうございます。
ファイルメーカーの場合、データを触った途端に全部書き換えられてしまうという特性があると思っていて、
初心者にありがちと思われるのでしょうが、誤ってレコードをいじってしまうのが怖いため、
あるステップを踏むまでは保存用のデータをいじれないようにするためにこのような形にしていました。
これを防ぐ方法が思いついていません。初心者あるあるなのでしょうか?

himadaneeさん
ありがとうございます。
サーバ上でスクリプト実行というのをよくわかっていませんでした。
オブジェクトも同時に操作したかったので、インポート用のいままでうまく行っていたスクリプトを
サーバ上で適応してみた(サーバ上で実行するスクリプトの中身に既存のスクリプトを実行させるよう
なコマンドを作成した。)のですが、サーバにあるデータはクライアント側のデータ修正が
反映されていないタイミングにあるのか、挙動がおかしかったです。
スクリプトを入れ子状態にしたのが更にまずかったのでしょうか。

Last edited by tomomon (2024-01-22 15:55:41)

Offline

#9 2024-01-22 16:05:32

Shin
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

テーブルBは、アクセス権で編集を禁止、また、最新レコードのみを閲覧許可という顕現を与えておきます。
テーブルAにIDのみのフィールドからテーブルBへリレーションを張り、IDが設定されたタイミングでトリガーでトランザクションを設定します。そのスクリプトを管理者顕現で動かしておくと、上で設定した制限は関係無くなりますので、レコードの編集が可能です。最後にレコードを画定させ、トランザクションの確定処理を行なってスクリプトを終了させれば、編集制限が有効になります。(トランザクション処理はちょっとクセのある処理で、FM19以降で利用できます)
トランザクションを使えなくても、テーブルAのグローバルフィールドを使って入力させ、管理者権限で設定した確定処理でテーブルBへ転送、という処理で同様の動きが作れます。

Last edited by Shin (2024-01-22 16:28:39)

Offline

#10 2024-01-22 20:41:54

tomomon
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

Shinさん

ありがとうございます。FM19は他のシステムとの関係上、使用できませんでした。
また、先程ご教授いただいた方法もわかるのですが、テーブルAで行う処理の都合上、ちょと混乱してしまい難しそうです。
一番初めに教えていただいた

Shin wrote:

ファイルの構造によりますが、
> 1、各テーブルは固有のIDでリレーションシップを貼っています。
から考えると、そのID のみを取り込めばいいのでは。それぞれのテーブルでデータが独自に編集されていくのでしたら、ルックアップでデータを自動入力させればいいでしょうね。
ID は。移動させるデータを対象にしておき、IDを一覧にする集計フィールドでテキスト列として取り込みます。そのIDをLoopで取り込み先で設定していけばいいでしょう。
または、元テーブルで、リレーション先のテーブルのIDをLoopで設定していってもいいでしょう。(大量ですと時間がかかりますが、30レコードくらいでしたら一瞬でしょう)

ただ、それぞれでデータが編集されないのでしたら、そのデータを移動させる意味がありませんね。IDのみを移動させればいい話のはずです。

の方法でもう少しわかりやすい方法はないでしょうか。(ルックアップを勉強するのに良いところはありますか?)

また、その際は、
https://qiita.com/tyuma/items/6ea12e0e182ce776c506
のようなことも注意が必要した上で、できれば良いのでしょうか。
質問ばかりで申し訳ございません。

Offline

#11 2024-01-22 20:43:46

himadanee
Guest

Re: WebDirectで別テーブルにレコードを移動する方法について

>オブジェクトも同時に操作したかった
あ、サーバ上でのインポートはfmpファイルは使えないので、オブジェクトフィールドはインポートできません。

タイミングというか、別クライアント上での実行ということになるので、呼び出したクライアントでの未確定変更は反映されないでしょう。

#12 2024-01-23 11:13:00

himadanee
Guest

Re: WebDirectで別テーブルにレコードを移動する方法について

#11で「未確定変更は」と書きましたけど、元々がインポートでやってたなら未確定なレコードというのは存在しないですよね...

#10のリンク先は「バックアップのつもりで~」という話題のようですが、その記事でも順位が下になってますけどバックアップなら別のテーブルにレコードを移動、というのは下策と思います。
テーブル定義を変えるときに両方やらなくてはいけなくなって、メンテナンスが面倒では?

Aの編集履歴をBに保存、という話のようですが、
ルックアップするとしたら、すでに書かれていますがAのIDが固有なので、BはID以外はすべてAからのルックアップを設定する、というだけのことだと思いますが...
B側は編集しないので、ルックアップ以外は計算フィールドも自動入力もすべてなくします。
レコード作成時の値を保持したいのでしょうから、「入力値の自動化」のオプションで変更禁止(一番下にある)の方がいいかも?
Bにレコード作成する際にレイアウト切り替えしないでできるテクニックが色々ありますが、それは上記ができた後の話ですね。

#13 2024-01-23 16:08:07

tomomon
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

Shinさん、himadaneeさん

いろいろありがとうございました。
見直してみます。

Offline

#14 2024-01-23 18:08:14

Shin
Member

Re: WebDirectで別テーブルにレコードを移動する方法について

トランザクションを使わずに、主キーを利用してアクセスをコントロールするサンプルです。同じIDの連続した編集(一旦終了して再度編集)が可能です。ファイルを終了したり、他のレコードを編集すると、履歴として残ります。その編集をキャンセルしたいときには、その時に作ったレコードを削除しておけばいいでしょう。
https://www.dropbox.com/scl/fi/glx63vol … 0cxay&dl=0

ちなみに、#10 のリンク先の動きは、主キーを上書きさせているので書き換えられてしまう、というものですので、参考にならないです。

Last edited by Shin (2024-01-24 10:22:32)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.013 seconds, 9 queries executed - Memory usage: 562.03 KiB (Peak: 582.94 KiB) ]