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

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

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

You are not logged in.

Announcement

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


#1 2013-11-18 19:32:09

みょん
Member

30ほどあるフィールドの値を一括で置き換えたい

使用環境
FileMaker:Pro Advanced 12.0v4
OS:Windows8


現状
・従業員テーブルの従業員名を値一覧に設定し、その値一覧を使用して入力しているフィールドが3つのテーブルで合わせて30ほどある
・従業員名が変わった場合に過去に入力したものも全て変更するようなスプリクトを組みたい
・従業員名で検索→置き換えというスプリクトを組んでみて動作は上手くいったものの、これを30フィールド分となると、とんでもなく長くなってしまう


組んでみたスプリクト
変数を設定[$$name1;値:従業員::従業員名]
変数を設定[$$name2;値:グローバル::従業員名入力用]
フィールド設定[従業員::従業員名;グローバル::従業員名入力用]
レイアウト切り替え[「営業報告書」(営業報告書)]
全レコードを表示
検索モードに切り替え[]
エラー処理[オン]
検索実行[記憶する] ←条件は営業報告書::担当者名:[==$$name1]
If[Get(最終エラー)=401]
  スプリクト実行[「全件表示」]
Else
  フィールド内容の全置換[ダイアログなし;営業報告書::担当者名;$$name2]
  全レコードを表示
End If
エラー処理[オフ]
レイアウト切り替え[「従業員」(従業員)]
カスタムダイアログを表示["従業員名変更";"従業員名を変更しました。"]

全件表示のスプリクト(他で使用するために作っていたものを流用)
ブラウズモードに切り替え[]
全レコードを表示
レコード/検索条件/ページへ移動[最初の]


どうにかもっと簡単にならないものかと考えています。
どなたかお知恵をお貸し下さい。

ちなみに、従業員名を入力するフィールドがこんなに多い理由ですが、営業報告書の書式のせいです。
目標・成果・次回の改善点など、各項目ごとに他の従業員がコメントを付けるという形式で、1項目につき5人分のコメントとコメントした人の名前を入力するフィールドを用意しています。

Offline

#2 2013-11-18 21:03:21

Layouter
Guest

Re: 30ほどあるフィールドの値を一括で置き換えたい

置換したいフィールドだけ並べたレイアウトで、「検索/置換」(全レコード・全フィールド)でやったらどうかな。

#3 2013-11-18 22:47:03

Shin
Member

Re: 30ほどあるフィールドの値を一括で置き換えたい

30フィールド分をテキストで書き出して、テキストエディター等で置換、書き戻す、と手順的には減りますが。(採用されないだろうな)

Offline

#4 2013-11-19 12:51:02

himaganee
Guest

Re: 30ほどあるフィールドの値を一括で置き換えたい

従業員コードで管理して、名前はマスタにだけ置けばいいんでしょうけど
リレーションが30個も必要ですね...

フィールド名をスクリプト引数で指定するとして、
GetField()
フィールドを名前で設定
はできるけど、全置換は、オブジェクト名を使うか、移動してみてフィールド名を見るかするしかないかな。

#5 2013-11-19 13:15:11

チポ
Member

Re: 30ほどあるフィールドの値を一括で置き換えたい

> 従業員名が変わった場合に過去に入力したものも全て変更するようなスプリクトを組みたい
こうすることが正しいか疑問ですが。。


> 従業員テーブルの従業員名を値一覧に設定し、
> その値一覧を使用して入力しているフィールドが3つのテーブルで合わせて30ほどある
一つのテーブルごとに見て、
それらのフィールドは従業員名が全て異なるのですか。


書かれたスクリプトでは、
例えば、従業員Aが入力されたレコード全てBに変更
としていますよね。

ならば、
そのフィールドをリレーションの参照フィールドとすれば、
もとの関連レコードの方を変更すればいいと思いますが、
そうできないのでしょうか。

Offline

#6 2013-11-19 14:33:22

mice
Guest

Re: 30ほどあるフィールドの値を一括で置き換えたい

1項目につき5人分の

もしこれが繰り返しフィールドだと、検索して全置換という方法自体が無理

#7 2013-11-19 17:12:42

みょん
Member

Re: 30ほどあるフィールドの値を一括で置き換えたい

Layouter様
回答ありがとうございます。
その方法だとかなり短いスクリプトにできそうです。
高さんを変更しようとして高木さんまで変更されるようなことがないかが心配でしたが、試しに新しいテーブルでやってみるとちゃんと高さんのみ限定して置換できたので、これでやってみようと思います。
教えていただいてありがとうございました。


Shin様
回答ありがとうございます。
一度書き出して置き換えるというのは思いつきませんでした。
今回のものは私以外の人も扱うので誰でもできるようにスプリクトを組んでおきたいと思いますが、他のことで何か置き換える必要があるときにはその方法でやってみます。
教えていただいてありがとうございました。


himaganee様
回答ありがとうございます。
リレーションが30個はさすがに頭が混乱してしまいますね……。
フィールド名をスプリクト引数で指定するというのがよくわかりませんが、それをするとループで処理できるということでしょうか。
もう少し頑張って勉強してみますね。


チポ様
回答ありがとうございます。
正しいかどうかは私も疑問ではありますが、そう作ってほしいとの要望だったので……。
たぶん、遡って見た時に旧姓だと分かり辛いとかそういう理由なのだと思います。

>それらのフィールドは従業員名が全て異なるのですか。
全て異なる訳ではありませんが、全て同じという訳でもありません。

>そのフィールドをリレーションの参照フィールドとすれば
どのフィールドに誰の名前が入るのか固定ではありませんし、1つのレコードで1人という訳でもありませんので、himaganee様の仰るようにリレーションが30個必要になってくると思うのですが……。
さすがに30もリレーションがあると後で見た時に混乱してしまいますし、私がいなくなった後のことを考えてもそれは避けたいと思うのですが、何か良い方法があるのでしょうか。
具体的に教えていただけると助かります。


mice様
コメントありがとうございます。
繰り返しフィールドの場合は検索置換が無理なのですね。
最初の値しか検索置換されないということでしょうか。
今回のものは繰り返しフィールドではありませんので大丈夫でしたが、もし繰り返しフィールドを扱う場合には気を付けますね。
教えていただいてありがとうございました。

Offline

#8 2013-11-19 17:21:37

mice
Guest

Re: 30ほどあるフィールドの値を一括で置き換えたい

検索置換が無理というのは、Layouterさんの「検索/置換」じゃなくて、最初のスクリプトのようにするとレコードの検索でどの繰り返しに一致したか判別できないという意味です。
関係ないレコードも含めてできるように全置換の式を工夫すれば、無駄が多いけど、できなくもないですね。

#9 2013-11-19 18:02:33

Shin
Member

Re: 30ほどあるフィールドの値を一括で置き換えたい

旧姓からの変更でしたら、職員マスターを作って、職員番号でリレーションしておく、というのが常道でしょう。リレーションが30個というのも、その運用の中ではいいのでは。
その運用でしたら、マスターの変更で、全ての該当レコードが変更されます。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 584.28 KiB (Peak: 600.82 KiB) ]