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

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

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

You are not logged in.

Announcement

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


#1 2016-03-16 00:13:02

eddie
Member

スクリプトによるデータベース間のフィールド内容のコピー

いつもお世話になっております。FMP11 Mac です。

2つのデータベース(それぞれデータベースA及びB)があります。

データベースAのフィールド内容をデータベースBのフィールドに入力するスクリプトを組みたいのですが、うまくいきません。

■ データベースAのフィールド内容を変数に設定
■ ファイルを開く(データベースB)
■ レイアウト切り替え  ←★
■ 新規レコード
■ フィールド設定

ざっくりとこのようなステップになるかと思ったのですが、データベースAのスクリプトステップではデータベースBのレイアウトを切り替えられないようです。

どうすればいいでしょうか?お知恵を拝借できると幸いです。
どうぞよろしくお願いいたします。

Offline

#2 2016-03-16 01:22:19

Shin
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

インポートするのが簡単だと思います。

Offline

#3 2016-03-16 09:23:18

チポ
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

間違いの指摘を二つ。

1. スクリプトで他のファイルを動かすことはできません
スクリプトステップ
  スクリプト実行
で他のファイルのスクリプトを実行させることはできます。

2. 変数でファイルをまたいで値を渡すことはできません。
変数が使えるのは同一ファイル内のみです。
上記のステップ
  スクリプト実行
のオプションのスクリプトパラメータで指定した値は、
それで実行するスクリプト内で、取得関数
  Get ( スクリプト引数 )
で取り出すことが出来ます。

Offline

#4 2016-03-16 09:40:28

Shin
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

リレーショナルデータベースの設計としては、データを複数のファイルへコピーする事は原則行いません。他のファイル(テーブル)の参照には、ユニークな情報でリレーションを張り、関連フィールドとしてその情報を利用します。

上のスクリプトでも、構造を変更すれば出来なくも無いです。
ファイルAにファイルBをテーブルオカレンスを作ります。(外部データソースを設定)そのオカレンスでファイルAにレイアウトを作ります。
ただ、これを行うとアクセス権関係が煩雑になりますので、必要な意図的に行う場合以外は、お薦めしません。

Offline

#5 2016-03-16 10:08:17

scripter
Guest

Re: スクリプトによるデータベース間のフィールド内容のコピー

色々やりかたはあるだろうけど、AとBには何かしら関係があるだろうから、リレーションでルックアップとか関連レコードを作成とかでやるのが一般的じゃないでしょうか。

#6 2016-03-16 23:06:28

eddie
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

Shinさま、チポさま、scripterさま、
ご回答ありがとうざいます。どうやら根本的に間違ったことをやろうとしていたようです。

具体的な構成を説明しますと、「台帳」というファイル(A)で案件情報を管理していて、それとは別に「報告」というファイル(B)で報告書を作成したりメールを送ったりしています。

案件に進捗があったときに、まず「台帳」にそのデータを入力し、次に「報告」を開いて報告書を作成する運用をしています。「整理番号」が両データベース(テーブル)のリレーションのキーになっているので、「報告」では整理番号を入力しさえすれば報告内容はほとんど自動で作成されます。

ところで、上記作業を一連で行えないかという要望がありました。すなわち、「台帳」に入力した段階で、「報告」を開かずに、台帳からスクリプトなどで報告を開いて整理番号を自動入力し、報告書を自動で作成してメール送信までを一括で行いたいというのです。上記質問で書いたような、台帳の整理番号を変数に設定して報告の整理番号フィールドに自動設定できればよかったのですが、これはできないとご説明いただきました。

このような場合にどうすればいいか、そもそもそのような方法があるのか、ご教示いただけないでしょうか。Shin様にご説明いただいた「ファイルAにファイルBをテーブルオカレンスを作ります。(外部データソースを設定)そのオカレンスでファイルAにレイアウトを作ります」という方法ならばできそうにも思いますが、データ入力者が弊社事務職員であることを考えると、アクセス権などの設定が複雑になるとかえってトラブルが生じてしまうかもしれません。

良い解決策があればご教示いただけると幸いです。お手数ですがどうぞよろしくお願いいたします。

Last edited by eddie (2016-03-16 23:07:24)

Offline

#7 2016-03-17 09:00:34

チポ
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

正しい方法を前レスで書いてあります、
それで目的は達せられるはずです。


> 「整理番号」が両データベース(テーブル)のリレーションのキーになっている
この整理番号は、両テーブルでユニークなんですか?
とすればひとつのテーブルで出来ますよ。

Offline

#8 2016-03-17 09:36:11

Shin
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

台帳を、ポータルで入力する様にしておくだけでしょう。参考例は検索されればたくさん出てきますよ。

チポさんの指摘の様に、1テーブルにまとめた方が、管理は楽になると思います。

Offline

#9 2016-04-02 16:44:53

eddie
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

チポ様、Shin様、
ご回答ありがとうざいます。
理解するのに少し時間がかかってしまいましたが、Get ( スクリプト引数 ) を使ってうまくいきました。報告書側のスクリプトでは「計算結果を挿入」を使うんですね。

上記では少し説明を省略してしまったのですが、報告書側では「整理番号」はユニークではありません(ひとつの整理番号の案件に対して、段階に応じて複数の報告をします)。そのため、整理番号と種別(大中小の3種類)の組み合わせで内容を特定しています。

それでも、Shinさまが仰るとおり報告書側で台帳のポータル入力をすればいいような気もします。これまでまず台帳に入力してそれを報告するという運用をしてきたので、この運用を変えられるか、事務側と相談しながら修正してみます。

Offline

#10 2016-04-02 18:26:46

Shin
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

台帳を、ではなく、台帳側で、と書き間違っていた様です。
台帳側に、報告書のポータルを作っておくと、報告書の一覧が表示させます。リレーションの設定で関連レコード作成を許可しておくと、その最下行では、新規関連レコードが作成可能です。さらに、ポータル行からボタン等で関連レコードへ移動、を行うと、その行の関連レコードが対象レコードになります。この機能を使うと、非常に簡単に動きが作れるはずです。

Offline

#11 2016-04-04 00:21:58

eddie
Member

Re: スクリプトによるデータベース間のフィールド内容のコピー

Shinさま
ありがとうざいます。その構成にすれば簡単に目的が達成できそうです。
早速取り入れさせれいただきます。素晴らしいアイデアをありがとうざいました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 541.45 KiB (Peak: 561.98 KiB) ]