開発環境
- Windows 7 Professional 32 bit
- FileMaker Pro 14 Advanced
レイアウト
- レイアウトに表示できる動的な値はテーブルの変数のみ。カスタム関数の結果は表示できない
スクリプト
- 編集 > 無効 (Ctrl + /) で選択したスクリプトステップを無効にできる。同じ操作で有効にできる。
- FileMaker Pro Advanced のみの機能
- 他のスクリプトを参考にしたくてコピペしたけれど実行はされて欲しくない、後から詳しくプログラミングするのでアイデアだけ書き留めたい、という時などに使える。
- スクリプトステップの無効化(FileMaker Pro Advanced)
- [現在のスクリプト終了] の返す <値または式> はブーリアンか整数か文字列のみと思っておく。構造をもったもの、オブジェクトは不可。
-
サーバーのとあるフォルダにアプリ FileMaker とデータベース FileMaker があるとする。
アプリ FileMaker とデータベース FileMaker を接続したいが、管理 > 外部データソースから操作しようとしてもサーバーのフルパスがわからないため、できなかった。 -
できた。データベース FileMaker のファイル名を DataBase.fmo12 とする。
- アプリ FileMaker の、管理 > 外部データソース > 新規
- 名前: DataBase
- タイプ: FileMaker
- ファイルパス一覧:
file:DataBase
[ファイルの追加] はクリックしない
- Max 関数は、1 つのレコードとそれに紐づくレコードのみが対象となる。紐づきのない複数レコードの任意のフィールドの値を比較できない。
- スクリプトで配列(リスト)を扱うことができる
- 事前に要素数を決める必要はなく、動的に拡張されていく。
- インデックス(添字)は変数にすることができる。
- [変数の設定] のオプションではたとえば次のように設定する。
- 名前: $values
- 値: “代入する値”
- 繰り返し: $i
- オプションのスクリプト引数など、計算式の指定ではたとえば次のように書く。
$values_a[$i] & ¶ & $values_b[$j]
- 【FileMaker】変数の繰り返し数(配列) – Qiita
- 値の左側を 0 で埋める方法
Right ( "00000" & $value ; 5)
← 左側を 0 で埋めて 5 桁の文字列を得る。- 得たい桁数分 000… と連続させることに注意。$value が空でも連続した 0 を返せるようにしている。
- シングルクォーテーションで囲むとエラーとなるので注意。
- みんなで助け合おう!初心者のFileMaker pro Q&A
- スクリプトで行を選択(複数行でもOK)し、Ctrl + ↑(↓) で行を上下へ動かすことができる。
-
$a_cnt と $b_cnt を比較して大きい方の 2 倍の数値を返す方法
変数を設定 [$ret_cnt; 値: Let(... ]
スクリプトの上記Let(...
が肝心で、次のように書いた。Let ( [ cnt = If ( $a_cnt > $b_cnt ; $a_cnt ; $b_cnt ) ]; cnt*2 )
ExecuteSQL
- ExecuteSQL の参考ページ
- あるテーブルの ID フィールドの最大値を ExecuteSQL を使って得る方法
ExecuteSQL ( "SELECT MAX(¥"ID¥") FROM ¥"テストテーブル¥""; ""; ""; "")
-
ExecuteSQL では、フィールド名は ¥” で囲む。
-
ExecuteSQL 内の SQL の WHERE 句で条件に文字列を指定するときはシングルクォーテーション ‘ で囲む。
エスケープしたダブルクォーテーション ¥” ではダメ。- OK:
ExecuteSQL ( "SELECT ¥"氏名¥" FROM ¥"ユーザー¥" WHERE ¥"氏¥" = '山田'"; ""; ""; "")
- NG (? が返ってきた):
ExecuteSQL ( "SELECT ¥"氏名¥" FROM ¥"ユーザー¥" WHERE ¥"氏¥" = ¥"山田¥""; ""; ""; "")
- OK:
- 同様に ExecuteSQL 内の SQL の WHERE 句で条件に日付けを指定するときもシングルクォーテーション ‘ で囲む。
- OK:
ExecuteSQL ( "SELECT ¥"氏名¥" FROM ¥"ユーザー¥" WHERE ¥"登録年月日¥" = '2016/04/21'"; ""; ""; "")
- OK:
- ExecuteSQL で複数フィールドの複数行データを取り出す方法
- ExecuteSQL の第2引数に | を指定する。
ただし、もしフィールドの値に | が入っていたら正しく動かない。 - 取得した件数は PatternCount で取り出す。
変数を設定 [$ret_cnt; 値: PatternCount ( $ret ; ¶ ) + 1]
最後の行の末尾には ¶ が付いていないため + 1 している。 - 行と行内のフィールドは、カスタム関数の GetArg を定義して取り出す。
- FMPro.jp : カスタム関数 : GetArg 関数
- 行の取得:
変数を設定 [$rows; 値: GetArg ( $rows; ¶; $i )]
← $i はループのインデックス - フィールドの取得:
変数を設定 [$field1; 値: GetArg ( $row; "|"; 1 )]
← 1 つ目のフィールド
- ExecuteSQL の第2引数に | を指定する。
以上です。