SQLは上級者、FileMakerは初心者という方へ
2014年10月14日 09:00 AM
はじめの一歩
FileMakerでSELECTクエリのようなスクリプトと非連結フォームのような
メニュー画面を作成する方法を紹介したいと思います。
ファイルメーカーでは、非連結フォームやSELECTクエリなど、
他言語での一般的な開発手法が取れないため、どう構築すれば良いか検討がつかない…という声を耳にします。
今回は、FileMakerの特徴と共に、FileMaker流の開発手法を少しご紹介したいと思います。
■FileMaker の特徴
ファイルメーカーには、下記三つの大きな特徴があります。
・データを表示させる際、レイアウトが必要
・クエリという概念を意識する必要がない
・テーブルオカレンスとレイアウト(フォーム)の紐付けが必須である
まず、この三つの特徴についてご紹介したいと思います。
◇◇データを表示させる際、レイアウトが必要◇◇
ファイルメーカーでは、データを閲覧する形式として三つのタイプが用意されています。
一つ目は、「フォーム形式」二つ目は「リスト形式」三つ目は「表形式」という名前です。
どれか1つの形式で構いませんが、
データを表示するためには、必ずレイアウトを作成する必要があります。
…と書いてしまうと構築に手間のかかるように思われますが、
ファイルメーカーでは新しいテーブルにフィールドを追加した際には自動的に
全ての形式のレイアウトが作成されますので、
そこに時間や手間がかかってしまうということはありません。
それぞれの形式の特徴は次の通りです。
・表形式
エクセルのような画面で、横軸にそのレイアウト上にある全フィールド(カラム)が並び、
縦軸にそのテーブルオカレンスの対象になる全レコードが並びます。
特別に指定をしない限り、フィールド・レコード共に作成順に並びます。
・フォーム形式
表形式に表示されているフィールドから、表示させたい項目を並べることができます。
FileMakerでは、画面に表示させる項目を決定する為の基本的な考え方が、
SELECTクエリの作成ではなく、フォーム形式用レイアウト作成になります。
・リスト形式
フォーム形式レイアウトとして作成したレイアウトのうち、ボディ部分が対象レコードの数だけ繰り返されます。
ボディ部分の幅が一行の幅になりますので、フォーム形式で表示することを
想定したレイアウトとは縦幅が大きく異なります。
◇◇クエリという概念を意識する必要がない◇◇
FileMakerの開発ではクエリという概念を意識する必要がありません。
表示させるフィールドやレコードを制御することや、
新規作成や削除、データの上書きなど基本的な操作を実行させる際も、
「クエリを作成する」ということを意識して行う必要はありません。
例えば、FileMakerでは、表示させたいテーブルオカレンス※1を指定している
レイアウトに切り替えるだけでレコードの表示が、
表示させたいフィールドをレイアウトに配置することで、フィールドの表示が可能です。
——
※1テーブルオカレンスについては、ブログの最後に詳しく説明を記載しています。
一言でいうと、テーブルが「実データの保存場所」であるのに対し、
テーブルオカレンスは「データをどのように表示するかという情報」です。
——
クエリなしで、表示するフィールドとレコードを制御する方法については後ほど記述します。
◇◇テーブルオカレンスとレイアウトの紐付けが必須である◇◇
・レイアウトは表示するテーブルオカレンスを指定することが必須である
・テーブルオカレンスは、どのテーブルから情報を取得するかが決まっている
上記二点により、一つ目、二つ目として紹介した特徴を実現しているのです。
それでは、FileMakerの特徴を理解した上で、次の選択クエリ(と同じ結果を表示するスクリプト)の
作成をおこなってみましょう。
SELECT code, product, price FROM tbl_m_product; WHERE product IN ( ‘apple’, ‘peach’) ;
スクリプト(※2)を新規作成します。
——
※2 FileMakerでいうスクリプトとは、一言でいうと「他言語でいうマクロのようなもの」です。
156種類の処理内容の指定と、処理内容毎にある詳細設定や関数・変数を組み合わせることで、
ほぼ無限大の処理を自動実行させることができます。
——-
1、FROM句を指定する
FileMakerでは、表示させたいテーブル(から作成されたテーブルオカレンス)が
紐付けられているレイアウトに切り替えることが、実質的にFrom句の指定となります。
このとき、指定したレイアウトにスクリプトトリガが設定されていると、純粋なFrom句の指定にならないことがあるので、
スクリプトトリガを指定していない作業用のレイアウトを作成しておき、そのレイアウトに切り替える手法が有効です。
tbl_m_product のテーブルオカレンスが指定されているレイアウトに切り替えます。
2、WHERE句を指定する
FileMakerでは、表示させたいテーブルオカレンスのレイアウトに切り替えた上で、
検索条件を指定する記述をスクリプト内に追加することでWHERE句の指定を行います。
検索モードに切り替え、フィールド設定で検索条件を記述、検索を実行、というスクリプトの記述が一般的です。
選択クエリを変更するのは簡単だけれども、レイアウトをその度に作成するのは大変では?という声を耳にしますが、
レイアウトの複製から編集が簡単にできることと、表示したい可能性のある項目は基本的に配置しておく、
という二点により、その問題を回避することが可能です。
(配置されていない項目でも検索条件の入力自体はスクリプト上可能ですが、配置しておくと開発時の検証が容易になります)
3、表示フィールド(カラム)を指定する
最後に、表示させたいフィールドを配置したレイアウトに切り替えることが、実質的に表示フィールドの指定になります。
この時、2番までで指定していたテーブルオカレンスと同じレイアウトでないと、
WHERE句FROM句の指定が解除されてしまうことに気をつけて下さい。
いかがでしょうか?
ファイルメーカーでの、SELECTクエリの作成方法をご理解頂けましたでしょうか。
次に、非連結フォーム(のようにメニュー画面を作成する)方法をご紹介します。
前記の通り、ファイルメーカーではレイアウトとテーブルオカレンスの紐付けが必須になりますので、
残念ながら非連結フォームは作成できません。
では、どのようにしてメニューレイアウトを作成すれば良いのでしょうか?
回答としては、「メニューレイアウト用のテーブル(とテーブルオカレンス)を作成する」ことになります。
ただテーブルを別にしただけでは、新規レコードの作成や削除が有効になってしまいますので、
ファイルをわけるなどして、ツールバー利用を制限するカスタムメニューのインストールを実行するスクリプトを、
ファイル起動時に自動実行することが有効です。
そのスクリプトに、メニュー用レイアウトの表示を記述しておくと、起動時に必ず同じレイアウトを表示させることができます。
FileMakerではあれもこれもできない…という声を耳にすることもありますが、
FileMakerならではの開発手法があるということをお伝えできていると嬉しいです。
(実はFileMakerでも、EXECUTESQL関数を使えば、SELECTクエリそのまま使えるのですが、
今回はFileMaker流 開発手法のご説明なので解説しておりません。)
テーブルオカレンスとは?
FileMaker Proでのリレーションの設定は、リレーションシップグラフを利用して行います。
図:リレーションシップグラフ
ここで注意して頂きたいのは、
リレーションシップグラフに表示されているものは全てテーブルではなくテーブルオカレンスと呼ばれる
仮想テーブルだということです。
さて、ここで注意してもらいたいのがテーブルとテーブルオカレンスの関係です。
FileMaker Proでデータベースを作成する場合、テーブルとテーブルオカレンスの違いについて
正しく理解しておくことが重要です。
新しいテーブルが作成されると、テーブルオカレンスも自動的に作成されます。
自動的に作成されたテーブルオカレンスの名前はテーブル名と同じものが付けられているため、
テーブル=テーブルオカレンスと勘違いしてしまいがちですが、明確に違うものであると理解してください。
テーブルとは、フィールドやそれに関連するオプション設定内容が納められた、実際にデータが保存される器であり、
利用目的や用途によって内容を切り分け複数のテーブルを作成することによって
さまざまな処理やシステムとして利用することが可能となります。
テーブルはあくまでもデータの器であるため、レイアウトや計算式、スクリプト、そしてリレーションシップでは、
直接テーブルを指定することはできません。
そこで登場するのがテーブルオカレンスです。テーブルオカレンスとは、リレーションシップグラフ上に
テーブルを仮想化して表示したものです。
FileMakerでは、このテーブルオカレンスを通して実データとアクセスが可能になります。
レイアウト、計算式、スクリプト、リレーションシップなどの設定は、テーブルに対して直接行うのではなく、
このテーブルオカレンスに対して行います。
テーブルオカレンスは、一つのテーブルに対していくつでも作成することができますし、
名前も処理内容が理解しやすいものに変更することができます。
レイアウトを作成し、どのテーブルオカレンスの情報を表示させるのか選択し、レコードを入力したとします。
その後に、リレーションシップグラフで対象のテーブルオカレンスを削除すると、
「非関連テーブルです」というエラーが表示され、
情報が見られなくなりますが、リレーションシップグラフで設定していたものと同じ名前の
テーブルオカレンスを再度作成すると、レコードの情報が再び表示されます。
これは、テーブルオカレンスを削除しても実テーブルや実レコードは削除されていないということを表しています。