みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんばんは。
linと申します。
Filemakerは初心者同然です。
よくわかっておりませんので、ご質問させていただきます。
環境は、Windows7、FileMaker pro 8です。
ペット葬儀関係の仕事をしていますので、その施主さんとペットを管理するデータベースを作っています。
1つのテーブルに、施主のページとして、施主の名前や住所、電話番号、故ペットの名前、故ペットの命日などフィールドを設けています。
別テーブルにカレンダーを作り、日付をクリックすると、その日付が命日の故ペットを検索して施主のページを絞り込もうと思っています。
そのスクリプトの作成についての質問です。
施主1人に対して故ペットが複数いる場合もありますので、レコードには1人の施主に対して、
故ペット名1~4、故ペットの命日1~4と故ペットに関してのフィールドを4つずつ設けています。
同テーブル内の4か所のフィールドを検索対象にできるものなのでしょうか?
スクリプトの作成方法、または例文などを教えていただけないでしょうか?
説明不足の部分もあるかもしれませんが、その際はご指摘ください。
宜しくお願いいたします。
Offline
テーブル設計が間違っています。
・「施主」テーブル、1施主1レコード、「施主ID」「施主名」他フィールド
・「ペット」テーブル、1ペット1レコード、「施主ID」「ペット名」他フィールド
・ リレーション
「施主::施主ID」 = 「ペット::施主ID」
ペットは「施主ID」で紐付けしておけば、何匹いても構いませんし、
「施主」テーブルに無駄なペットフィールドを設ける必要もありません。
「施主」側から関連レコードとしてポータルに表示させることが出来るので
ペット数は無限です。このポータルからペット側テーブルのデータの作成、
入力や更新なども自在に出来ます。
Offline
Hiroさん、お返事ありがとうございます。
やはり、元からダメだったんですね…
リレーションシップがよくわかっておらず、上記のようなやり方でやってしまっていました。
作り直します。
ちなみに、教えていただいたやり方で、
「施主」テーブルに、施主IDで紐付た「ペット」テーブルの情報を自動的に反映、表示させる方法をお教えください。
Offline
作り直しました。
「施主」テーブル、「ペット」テーブルを別々に作って、施主側で関連レコードとしてペットの情報をポータルに表示させる事ができました。
初めに戻りますが、
別テーブルにカレンダーを作り、日付をクリックすると、その日付が命日の故ペットを検索して施主のページを絞り込もうと思っています。
スクリプトの作成について全く分かっておらず、どのように作ったら良いかわかりません。
スクリプトの作成方法、または例文などを教えていただけないでしょうか?
ちなみに、カレンダーの構成は、
フィールド名、タイプ、オプション/コメント
開始日、日付、グローバル
曜日、計算[7]、グローバル,=Choose(Get(計算式繰り返し位置番号);"";TextColor("日";RGB(255;0;0));"月";"火";"水";"木";"金";"土")
日付、計算[42]、グローバル,=Let([$start=Date(Month(開始日[1]);1;Year(開始日[1]));$date=$start + Get(計算式繰り返し位置番号) - DayOfWeek($start)];$date)];Case(Month(開始日[1])=Month($date); $date))
です。
説明不足がありましたら、ご指摘ください。
宜しくお願いいたします。
環境は、Windows7、FileMaker pro 8です。
Offline
気が付いた点などを列挙します。
●カレンダーは「施主」テーブルの方が良いと思います。
●基本的な流れ
繰り返し[42]フィールドカレンダー→@日付クリック指定→同命日一覧ポータル表示→@施主クリック指定→指定施主レコードを表示(関連レコードへ移動)(→施主データの編集は元よりそのレコード上のペットポータルからペットデータ編集も出来る)
●カレンダーを「施主」テーブル上に置く事により、上記全てを1画面(施主レコードのフォーム形式表示)に展開することが可能となり、便利かと。
●ポイントは「@日付クリック指定」のスクリプト起動ボタンですが、その要領は、
・カレンダー繰り返し[42]フィールドは、1項づつ分離して、各項づつ固有の位置番号をスクリプト引数に割り当てます。
・その引数を受けたスクリプト側でクリックされた日付を間接的に割り出します。
・なお、Get(アクティブフィールド内容)値はスクリプトでは取得できません。関数よりスクリプト起動が優先されるからです。
・クリック日付が取得できたら、それをg日付キーへ代入、関連命日リレーションを確立→関連命日一覧をポータル表示
・クリック日付取得の要領で、クリック施主を関連レコードへ移動でフォーム形式画面表示
・それと、少なくとも、条件付書式が使えたらと思うのですが、バージョンアップ無理ですか?せっかく新たに作るならモッタイなか?
ざっと、こんな感じのイメージですが、事例は、ToDoカレンダー非トリガー系の過去ログサンプルをご覧ください。
(サンプルでは条件付書式が多用してありますが残念)
Offline
Hiroさん、お返事とご指摘ありがとうございます。
カレンダーは、カレンダーのみの表示にしておきたかったので、別テーブルに作りました。
ちょっと複雑に考えすぎていました。
「ペット」テーブルに施主の必要な情報だけポータルに表示させるようにして、単純にペットのページを絞り込むことにしました。
このように多少、不格好でも今のバージョンでできる範囲でやっていこうと思っております。
ただ、何が出来て何が出来ないのかが、わかっておりませんので、複雑なことを言ってしまうかもしれません。お許しください。
話を戻しまして、
教えていただいたポイントの部分で、
カレンダー[42]フィールドは、1項づつ42項に分離しましたが、クリックされた日付を間接的に割り出す方法が皆目見当がつきません。
何分、初心者ですので、どのようにすれば良いか教えていただけませんか?
宜しくお願いいたします。
Offline
> カレンダー[42]フィールドは、1項づつ42項に分離しましたが、クリックされた日付を間接的に割り出す方法が皆目見当がつきません
言葉で説明するよりサンプルファイルをご覧になられた方が理解しやすいと思います。
「ToDoカレンダー非トリガ版.fp7」http://yahoo.jp/box/51qFFh
Offline
サンプルファイル拝見させていただきました。
カレンダーのデータベースで、
「キー日付」のオプションの計算値ですが、
Case(Month(キー日付)=Month(開始日);<関数が見つかりません><関数が見つかりません>)
となっていました。
これはやはり、バージョンによって使えない関数って事でしょうか?
一度、自分なりに考えてスクリプトを作ってみました。
結果は失敗でした。たぶん、月と日で検索が必要なのに年まで入ってしまった事だと思います。
根底から間違っているのかもしれませんが、ご確認・ご指摘もらえますか?
エラー処理[オン]
レイアウト切り替え[「古ペット」(古ペット)]
検索モードに切り替え[一時停止]
フィールド設定[古ペット::命日; ToDoカレンダー::日付一覧[Get(スクリプト引数)]]
検索実行[]
Offline
自分自身を表すSelf関数が使われていました。Self → キー日付 に替えて貰えばOKです。
Case(Month(キー日付)=Month(開始日);Self)
↓
Case(Month(キー日付)=Month(開始日); キー日付)
あとスクリプトは検索ではダメです。あくまでリレーション照合でないと。
Offline
自分自身を表すSelf関数が使われていました。Self → キー日付 に替えて貰えばOKです。
Case(Month(キー日付)=Month(開始日);Self)
↓
Case(Month(キー日付)=Month(開始日); キー日付)あとスクリプトは検索ではダメです。あくまでリレーション照合でないと。
ご指摘ありがとうございます。
最初からやり取りを見直していて、一つ言い忘れていた事がありました。
お気づきかもしれませんが。
命日を検索する事について、
例えば、2016年2月13日の日付をクリックしたときに、2015年2月13日や2014年2月13日など、西暦は関係なく月と日のみの検索をしようと思っています。
教えていただいたやり方で検索をする際、西暦関係なく検索できるものでしょうか?
Offline
ちなみに、以前違うサイトで同じような質問をした際にいただいたサンプルがあります。
ただ自分には、それを解析し自分のものにできる力がありませんでしたし、いただいた方に聞こうにもサイトが閉鎖されたみたいだったので聞けずにいました。
よかったら見ていただけませんか?
Offline
サンプルは恐らくShinさんの作と思います。
カレンダー表示する日付を全て事前に作成するようで、
私の簡素化を目指すものとは基本的に違った考え方です。
また、ToDoカレンダーはリレーション照合に基づいたもので、検索とは無縁です。
そのため、年抜き命日のようなワイルドカード検索はできません。
相互のリレーションキーを月日キーに変更してください。
Offline
同じようで違った考え方で作られたものだったのですね。
1つ勉強させていただきました。
Hiroさんにご指摘されたとおり、「施主」レコードにカレンダーを設け、キー日付に代入した日付をもとにポータルで表示させるところまでは出来ました。
ですが、やはり年まで入ってしまいます。
相互のリレーションキーを月日キーに変更してください。
とは、具体的にどのような事でしょうか?
初心者も同然ですので、ご面倒かもしれませんが、宜しくお願いいたします。
Offline
また、そのやり方を応用すれば、月単位で絞りこむ事も可能でしょうか?
例えば、1月なら1日から31日までが命日のペット全部を絞りこむことも考えています。
Offline
作成するキーは2つ、
・「日付キー」に対しては、「命日キー」とでもして、グローバル計算フィールドとし、式は、(計算結果:テキスト、非保存)
Right("00"&Month(日付キー);2) & Right("00"&Day(日付キー);2)
・次に「日付」に対しては、「命日」とでもして、標準計算フィールドとし、式は、(計算結果:テキスト、保存)
Right("00"&Month(日付);2) & Right("00"&Day(日付);2)
この両者でリレーションすれば、年は抜きに同じ命日の施主レコードが照合できます。
> また、そのやり方を応用すれば、月単位で絞りこむ事も可能でしょうか?
例えば、1月なら1日から31日までが命日のペット全部を絞りこむことも考えています。
と言う事は、月を指定するだけのためにわざわざカレンダーから選択するのですか???
カレンダから何をお求めでしょうか?
月単位で絞り込むなら、その条件を満たすような照合キーを作るまでですが、上の例から考えてみてください。
Offline
Hiroさん、ありがとうございました。
おかげさまで、年は抜きで同じ命日を照合する事ができました。
> また、そのやり方を応用すれば、月単位で絞りこむ事も可能でしょうか?
例えば、1月なら1日から31日までが命日のペット全部を絞りこむことも考えています。
と言う事は、月を指定するだけのためにわざわざカレンダーから選択するのですか???
カレンダから何をお求めでしょうか?
月単位で絞り込むなら、その条件を満たすような照合キーを作るまでですが、上の例から考えてみてください。
説明不足だったかもしれません。
誤解を与えいたのなら、すみません。
カレンダーからは、その日付をクリックする事で、その日付が命日だったペットやその施主を割り出し、
その日のスケジュールを割り出す事が目的でした。
今回トピックを作ったタイトルとは違ってくるのかもしれませんが、
それとは別に、レコードに登録した施主やペットの情報を元に、施主に命日をお伝えするハガキを作ろうと考えています。
そのハガキの作成にあたって、命日の月単位でのハガキの作成を考えていました。
その事がありましたので、上記の質問をさせていただきましたが、ハガキを作成するざっくりとした流れを教えていただけませんか?
自分の力の無さを痛感しております。宜しくお願いいたします。
Offline
ハガキの作成について、
別のレイアウトで、「ペット」テーブルのフィールドとリレーションで繋いだ「施主」テーブルのポータル表示を使ってハガキ画面は作り上げました。
それで、命日を月単位で検索してレコードを絞りこみたいです。
スクリプトを作ろうと思ってますが、検索実行する前のフィールド設定の計算式はどのようにすれば良いでしょうか?
自分は初心者です。自動計算するカレンダーなどは難しいので使わず、1月~12月のボタンを作って、1月なら1月、2月なら2月と、定数でやろうと考えています。
過去トピックスで見たのですが、
"*/” & Month(Get(日付)) & "/" & Day(Get(日付))
を利用して定数で月を検索できませんか?
宜しくお願いいたします。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 571.11 KiB (Peak: 592.02 KiB) ]