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

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

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

You are not logged in.

Announcement

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


#1 2017-02-24 10:39:37

kaz797
Member

フィールド値を取得するスクリプトについて

投稿方法を間違ってしまって、ご迷惑をおかけしています。

まったくの素人です。
すでに作成されているソリューションが重くて共有による利用ができません。
そこで、計算フィールドを減らすため、スクリプトを利用しようと思っています。
質問の内容は、「条件に一致するフィールド値を持つレコードの他のフィールドの値を取得するためのスクリプト」です。
よろしくお願いいたします。

Offline

#2 2017-02-24 10:57:05

Layouter
Guest

Re: フィールド値を取得するスクリプトについて

普通はルックアップを使う案件のように読めますが。

#3 2017-02-24 11:14:56

kaz797
Member

Re: フィールド値を取得するスクリプトについて

ルックアップでは難しいのではないかと思っていなす。
「条件に一致するフィールド値を持つレコード」は複数あり、それらのレコードの「他のフィールドの値」も複数です。
具体的には、値一覧に設定するデータ(30)から上の「他のフィールドの値」を削除して、他のテーブルのフィールドに埋め込みたいのです。
そして、このフィールドの値を「値一覧」が参照することにしたいのです。
なお、「条件付き値一覧」では解決できないと思うのですが?

Last edited by kaz797 (2017-02-24 11:31:44)

Offline

#4 2017-02-24 11:32:00

チポ
Member

Re: フィールド値を取得するスクリプトについて

> 条件に一致するフィールド値を持つレコード
これは、
そのフィールドでリレーションすればその関連レコードですね。

それが複数なら、
  List関数
で関連フィールドの値のリストが得られます。


> それらのレコードの「他のフィールドの値」も複数です
それらのフィールド値をリストにするフィールドを作ればいいでしょう。


> 値一覧に設定するデータ(30)から上の「他のフィールドの値」を削除して
そのデータはどこに有るのですか?


> すでに作成されているソリューションが重くて共有による利用ができません。
> そこで、計算フィールドを減らすため

「重い」
がどのような現象か分かりませんが、
計算フィールドが原因になっていると決めつけるのはお間違いと思いますよ。

Offline

#5 2017-02-24 12:00:10

kaz797
Member

Re: フィールド値を取得するスクリプトについて

ありがとうございます。

(引用の方法がわからないので、見にくくてすみません。)

>そのデータはどこに有るのですか?
「値一覧」だけを格納するテーブルを作り、その中のフィールドに「繰り返し」を指定してデータを配置するつもりです。
その繰り返しデータから得られた関連フィールドの値を削除して、同じテーブルの別のフィールドに格納することを考えています。
そして、これが「値一覧」のソースになる という考え方です。

>計算フィールドが原因になっていると決めつけるのは
まったくの素人(まだ3週間ぐらい)で、原因の見当がつきませんので、色々試すつもりです。

Offline

#6 2017-02-24 13:50:38

Shin
Member

Re: フィールド値を取得するスクリプトについて

元ソリューションが重い、という事を改善させるのが先決では。
そのデータを利用するのでしたら,アクセスが無くなる事は無いでしょうから,いつまでの参照が重くなっているだけでしょう。
場合によっては,最適化コピーを行ったり、オブジェクトファイルを外部保存に変更するだけで,激改善することもありますよ。

Offline

#7 2017-02-24 15:07:47

Hiro
Member

Re: フィールド値を取得するスクリプトについて

質問を読み切りていませんが、
一覧リストAから一覧リストBを差引いた残り一覧リストを得る、
すなわち、「差集合関数」or「逆FilterValues関数」的な計算に関してでしたら、
下式で算出できます。

Let([
   $prm[1]=リストA;
      $prm[1]=¶ & $prm[1] & ¶;
   $prm[2]=リストB;
         $prm[2]="[\"\¶" & Substitute($prm[2]; [¶; "\¶\";\"\¶\"];[\"\¶"]) & "\¶\";\"\¶\"]";
            $prm[2]="Substitute($prm[1];" & $prm[2] & ")";
   $res=Evaluate($prm[2]);
      $res="\"" & Substitute($res;[¶;"\";\""]) & "\";\"\"";
         $res="List(" & $res & ")"
];
   Evaluate($res)
)

もし、結果を固定化スクリプト保存したいなら、この計算結果で「フィールド設定」するとか?

Offline

#8 2017-02-24 17:11:07

kaz797+1
Guest

Re: フィールド値を取得するスクリプトについて

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

まだ、スクリプトや計算式の書き方や読み方がわかりません。
今後、勉強します。

#9 2017-02-24 17:31:37

Shin
Member

Re: フィールド値を取得するスクリプトについて

スクリプトで単純に考えても、その絞り込んだレコードから、一覧用のテーブルへ関連レコードへ移動、対象レコードを削除するか、対象外を表示しておけば良いだけでは。

Offline

#10 2017-02-24 18:20:36

チポ
Member

Re: フィールド値を取得するスクリプトについて

Hiroさんの
> 一覧リストAから一覧リストBを差引いた残り一覧リストを得る
が正しいのですね。

で、もう少し分かりやすい式を、、

二つのリストは改行テキストとします。
(繰り返しなら、List関数で改行テキストに出来ますよね)

  Let ( [
         $lst1 = リストA & ¶ ;
         $lst2 = リストB ;
         $ct = 0 ;
         $しき = "Case ( $ct > ValueCount ( $lst2 ) ; $lst1 ;
                      Let ( [ $ct = $ct + 1 ; $lst1 = Substitute ( $lst1 ; MiddleValues ( $lst2 ; $ct ; 1 ) ; \"\" ) ] ; Evaluate ( $しき ) ) ) " ] ;
         Evaluate ( $しき )
         )

これは最後に改行が付いたリストを返しますが、
値一覧を得るためなら問題ないでしょう。

Offline

#11 2017-02-25 10:29:01

kaz797
Member

Re: フィールド値を取得するスクリプトについて

皆さん ありがとうございます。
もう少しきちんと説明したほうがよかったと思います。

実は、予約管理のシステムを開発しているところで、既にある程度、目的は実現されています。
しかし、いわゆる正規化がまったくと言ってよいほどできていません。
予約情報を管理する一つのテーブルの中に、予約時間を入力するためのポップアップのもととなる「値一覧」(フィールドA)まで、一緒に定義されています。
また、既に使われた予約時間を削除したものが、同じテーブルの別フィールドBに定義されています。
予約時間を入力するフィールドのポップアップのソースは、実際にはフィールドBになっています。
そのほかにも、これに類するフィールドが同一のテーブルに定義されています。
特に、値一覧のソースとなるテーブルのフィールドには、すべてのレコードに繰り返しデータが格納されることになります。
さらに、これらの多くは計算フィールドとなっていて、パフォーマンスに影響を与えることになっているのではないかと考えています。
FileMaker Serverでホストしたファイルでこのシステムを動かすと、予約時間のポップアップが表示されるのに数分かかる始末です。

そこで、別のテーブルを用意し、「値一覧」のソースを格納し、予約時間が使用されたときに、その時間を削除したデータを別のフィールドに格納するスクリプトを作ればよいのかなと、考えました。

なお、予約時間は、8:45から15分刻みに、昼休み時間を除き16:45までの30コマ(15分間を「1コマ」(仮称)として)です。
予約時間は、項目ごとに異なり、例えば第1の項目は2コマ(例えば8:45、9:00)、第2の項目は3コマ、第3の項目は4コマが使用されてしまいます。
二つ目以降の予約が入ったとき(担当者ごとに、一日に6~10の予約が入ります。)は、既に使用している時間(コマ)がポップアップに表示されないようにしたい分けです。


以上、長々と書いて申し訳ありません。
基本的な考え方そのものに誤りがあるかもしれません。
何らかのヒントをお願いします。

Offline

#12 2017-02-25 10:47:55

Shin
Member

Re: フィールド値を取得するスクリプトについて

https://fm-aid.com/bbs2/viewtopic.php?id=5444
などと同じ話題でしょう。
GUIで予約を設定できるサンプルがそちらに用意してあります。これの方が運用は楽なはずです。

Offline

#13 2017-02-25 11:40:59

kaz797
Member

Re: フィールド値を取得するスクリプトについて

ありがとうございます。
早速、確認してみます。

Offline

#14 2017-02-25 17:23:53

kaz797
Member

Re: フィールド値を取得するスクリプトについて

Shin 様
ありがとうございます。
https://fm-aid.com/bbs2/viewtopic.php?id=5444
から
https://www.dropbox.com/s/ayuq5p7a4jp7w … 2.zip?dl=0
にあるZIPファイルを開けばよいのでしょうか。

Offline

#15 2017-02-25 17:59:06

Shin
Member

Re: フィールド値を取得するスクリプトについて

https://fm-aid.com/bbs2/viewtopic.php?id=1616
のスレッドで提示しているサンプルのの方が良さそうです。

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: 556.84 KiB (Peak: 577.74 KiB) ]