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

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

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

You are not logged in.

Announcement

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


#1 2023-07-21 15:31:41

UU
Guest

[コピー&ペースト]と[フィールド設定]

filemakerを使用している際、いままでコピー(Aファイル)&ペースト(Bファイル)を利用して、
検索に使用したい値を取得しておりました。
ふと、フィールド設定の方が、コピー&ペーストよりもシステム的に負荷が少ない(処理速度があがる?)のでは、
ないかと考え以下のように変更しました。


<修正前>
スクリプト実行:検索モードに切り替え
コピー
ペースト
スクリプト実行:検索実行

<修正後>
スクリプト実行:検索モードに切り替え
フィールド設定
スクリプト実行:検索実行


Q1:処理速度はフィールド設定の方が早いのでしょうか?(物理的なコピー&ペーストではないので早く処理できますか?)
Q2:そういったスクリプトの速度を計る方法はありますか?(実行速度をテストしてみたいです)
Q2:ファイル間でフィールド設定をした場合、なぜかうまく値を取得できません。なぜでしょうか?

以上になりますが、引き続き何卒よろしくお願いします。

#2 2023-07-21 15:56:16

himadanee
Guest

Re: [コピー&ペースト]と[フィールド設定]

コピペは、OSのクリップボードにデータを渡す必要があるので、FM内で処理が完結するフィールド設定より遅い可能性はあるでしょう。
でもよほど大量でなければわからないと思うけど...
遅くなくても、他のことでユーザがクリップボードを使ってる可能性があるのでコピペは使わない方がいいですね。
最新OSならクリップボードも履歴が使えるのかな。

検索モードなので関連レコードは存在しないでしょうから、別ファイルのフィールド値は取得できないのでは。グローバルフィールドなら可能と思いますが

#3 2023-07-21 16:59:48

Shin
Member

Re: [コピー&ペースト]と[フィールド設定]

複数ファイル間でのデータの移行ですので、コピペが一つの方法でしょうが、その瞬間にクリップボードが別のアプリケーションによって書き換えられる可能性があるので、おすすめできません。
また、関連のない別ファイルへはフィールド設定はできませんし、まして、検索モードでのフィールド設定はできません。

一般的に使われている方法は、元データをスクリプト引数として相手ファイルのスクリプトを呼び出します。Get ( スクリプ引数 ) 関数で引数を取り出し、フィールド設定すればいいでしょう。
または、そのフィールド感でリレーションを張り、関連レコードへ移動 を行う方法が、最も多く使われているかもしれません。

実行時間は、Get ( タイムスタンプ ) または Get ( UTCミリ秒 ) をその処理の前後で取得して変数に保存しておき、その結果を比較するといいでしょう。

Offline

#4 2023-07-26 14:00:48

UU
Guest

Re: [コピー&ペースト]と[フィールド設定]

himadaneeさま
ご返答ありがとうございます!あまり速度自体に違いは起きにくいがコピー&ペーストは危険である旨、勉強になりましたありがとうございます

Shinさま
同じくコピペが危険である旨、時間の求め方をご教示いただきありがとうございます

>一般的に使われている方法は、元データをスクリプト引数として相手ファイルのスクリプトを呼び出します。Get ( スクリプ引数 ) 関数で引数を取り出し、フィールド設定すればいいでしょう。
>または、そのフィールド感でリレーションを張り、関連レコードへ移動 を行う方法が、最も多く使われているかもしれません。

ずっとコピー&ペーストでファイル間でフィールドの値をやりとりしていたので、まさか更に別の方法があるとは驚きでした。
ただ、上記の方法(多分2通りご提案いただいておりますが、まったくやりかたがわかりません)
公式のマニュアルを見てもいまいち活用方法が異なるような気がするのですが、もう少し具体的に教えていただけないでしょうか?

[異なると考えた点:スクリプト引数]
スクリプト引数は、フィールドの値というよりあらかじめ値を設定しておくもの、フィールドが[田中]の状態でスクリプト引数に[田中]、フィールドが[中山]の状態でもスクリプト引数は[田中]のままになるので、
フィールドの値を別のファイルに引っ張ってくる方法には応用できないかと思っております。

[異なると考えた点:関連レコードの移動]
関連したレコードに移動するのみでフィールドの値をファイル間でやりとりする形と少し違うような気がしております

お手数ですが、引き続き何卒よろしくお願い致します

#5 2023-07-26 15:00:12

チポ
Member

Re: [コピー&ペースト]と[フィールド設定]

ファイルAでファイルBのスクリプト実行、
その時スクリプト引数を設定すると、
ファイルBのスクリプト内でその引数を取り出せます。

スクリプト引数には、もちろんフィールド値も設定できます。


関連レコードへ移動
で検索と同じ結果を得ることができますよ。

Offline

#6 2023-07-26 15:19:58

Shin
Member

Re: [コピー&ペースト]と[フィールド設定]

https://www.dropbox.com/scl/fi/in6ox1pf … dgn4w&dl=0
同じファイル内で呼び出しているのでわかりにくいかもしれませんが。

[異なると考えた点:スクリプト引数]
スクリプト引数は、何でも入れることができます。特殊なものでは、ファイルそのものを入れることもできますよ。フィールド値をいれることもできますし、計算結果をいれることもできます。

[異なると考えた点:関連レコードの移動]
上で例示されているスクリプトでは、元の値をコピーしてきて、検索モードでその値を検索しています。つまり、元と同じ値のレコードを抽出しているのですから、結果としては、関連レコーへ移動 を行ったのと同じです。

Offline

#7 2023-07-26 16:58:20

UU
Guest

Re: [コピー&ペースト]と[フィールド設定]

チポさま
いつもありがとうございます!
教えていただいた文章通りやってみたらうまくいきました。
関連レコードへ移動=検索 と同等の結果ということは、検索でも問題ないということでいいでしょうか?

Shinさま
いつもありがとうございます!
頂いたファイルありがとうございました。
自分には未知のスクリプトが組まれており大変勉強になりました。
ただ、使い方がいまいちよくわからなかったです。callのスクリプトを使用して検索したいフィールドの値を入力しても
検索結果が[A/0]みたいな表示となり、Kフィールドを検索したかったのですがうまく表示できませんでした。
私が勝手に使用方法を解釈しておりますが...

スクリプトの引数は、なんでもいれられる旨教えていただきありがとうございました。
これからはコピー&ペーストでなくスクリプト引数を使用してファイル間で値のやりとりをしていくように努めたいと思います

#8 2023-07-26 17:02:18

UU
Guest

Re: [コピー&ペースト]と[フィールド設定]

【スクリプトの引数】の扱いにおける注意点

[スクリプトの引数]を設定と教えていただき、filemakerのマニュアルで見るとボタンに対してスクリプトの引数を設定していたので、
スクリプトの引数はボタンでしか設定できないと勝手な勘違いをすることで少し混乱しておりました。

スクリプトの設計画面で[スクリプトの実行]を記述するとスクリプトの引数を設定する項目が現れるので、そこに任意の設定したいフィールドを記述すれば
その値をそのまま利用できるようになりました。

備忘録兼同じ悩みでお困りの方のために記述しておきます
みなさまありがとうございました!

#9 2023-07-26 17:38:50

Shin
Member

Re: [コピー&ペースト]と[フィールド設定]

最初のダイアログが表示された時点でアクティブになっているレコードのフィールド値、または、ダイアログの中で指定した文字で、テーブルを検索しています。
receipt 側のスクリプトをみてみられるといいでうが、ダイアログで表示しているもじは、そちらのスクリプトでの実行結果を文字列にして返して(スクリプトの結果)、表示させています。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 584.51 KiB (Peak: 601.41 KiB) ]