繰り返しフィールドの入力状況を確認する
久しぶりに書くブログの内容が「繰り返しフィールド」って…
と思われる方もいらっしゃるかもしれませんが、、、
批判されることを覚悟で書きますが、
私は繰り返しフィールドを使うことをそれほど悪いと思っていないのです。
FileMaker独自の考え方といえばそうですし、
他のデータベースとのやり取りには向いていないこともわかっています。
が、、、
繰り返しフィールドの特徴をちゃんとわかった上で使うのであれば、
使い方によってはこんなに便利なものを使わないのももったいないと思っています。
ポータルで作るほどのことではなく「ちょっと欄が分かれて見えればいい程度」…
というときに「繰り返し」を使っています。
繰り返しの便利だと思うところの一つはこれ。
繰り返しフィールドは、見た目は別枠になっています。
けれど、本当は1つのフィールドなので、
どの枠に入れても同じ検索条件でヒットするのはとても便利だと思います。
とはいえ、時々「どんな状況になってるのかわかりづらい」と思うことがあります。
たとえば、
何行目まで値が入っているのか?
繰り返しの数は足りているのか?余っていないか?
ということを調べたい時に「えーっと、どうやればいいんだっけ?」
なんて思うこともあります。
(それほど頻度は高くないので、やり方を忘れちゃうんです^^;)
ポータルだったらすぐできることが、
繰り返しフィールドの場合だとすぐにはできない(思い出せない)なんてことがありまして、
今回は、またも自分用のメモとしてブログに書いておくことにしました。
繰り返しってどこで設定するの?
ファイル>管理>データベース で「データベースの管理」を開き、
フィールドのところに1つフィールドを追加します。
今回は「繰返し_好み」というテキストタイプのフィールドを作りました。
作ったフィールドの「オプション」を開き、
「データの格納」のところにある「繰り返し」の数を指定します。
(通常は1になっています)
作ったフィールドをレイアウトに配置したら、インスペクタで表示する数や並びを決めます
今回は5つの繰り返しを設定したので、
レイアウト上も1つ目から5つ目の繰り返しの欄が縦に表示されるように設定しました。
ブラウズモードにして、それぞれに値を入れてみます。
繰り返しに入力してみた状態
左は全部入力した状態、
右は飛び飛びに入力。
飛び飛びの入力をするのも簡単なのが繰り返しの便利なところ
なんて思ったこともありましたが、
飛び飛びにしていると、
繰り返しの行数が足りているのかどうかの確認がちょっとしづらいんです。
何行目まで入力したのか確認する
繰り返しに使えそうな関数をみてます。
まず大きな括りとして「繰り返し関数」というのがあります。
このくくりには3つの関数があります。
(関数の使い方はヘルプを参照してください)
それ以外に使えそうな関数を探してみると、、、
取得関数の中に、
・Get (アクティブ繰り返し位置番号)
・Get (計算式繰り返し位置番号)
という関数もあります。
(関数の使い方はヘルプを参照してください)
Last関数を使ってみます。
計算タイプのフィールドを作り、計算式には
Last ( 繰返し_好み )
と指定しました。
5つとも入力したレコードの計算フィールドは「プードル」、
飛び飛び入力したレコードの計算フィールドは「ピアノ」という値を返します。
繰り返しフィールドの
値の集計を計算したい場合は「Sum関数」
値が入っている繰り返しの数を計算したい場合は「Count関数」
を使います。
計算タイプのフィールドを作り、計算式に
Count ( 繰返し_好み )
と指定すると、
5つとも入力したレコードの計算フィールドは「5」、
飛び飛び入力したレコードの計算フィールドは「3」という値を返します。
この計算タイプのフィールド名を「値有りの繰返し行カウント_cn」としておきます。
今度は取得関数を使ってみます。
計算タイプのフィールドを作り、計算式に
Get ( 計算式繰り返し位置番号 )
と指定します。
計算結果は「数字」を指定し、
繰り返し数に「5」と指定します。
(繰り返し数に1より大きい数を指定すると、
計算タイプのフィールドも「繰り返し」にすることができる)
計算結果はいずれのレコードも同じ、以下のようになります。
今度は
Get ( 計算式繰り返し位置番号 )だけだったのを少し改良し、
以下の計算式にしてみます。
Case (
IsEmpty ( GetRepetition ( 繰返し_好み ; Get ( 計算式繰り返し位置番号 ) ) ) ; "" ;
Get ( 計算式繰り返し位置番号 )
)
すると返ってくる結果が変わります。
もう一踏ん張り、計算式を改良してみます。
Case (
GetRepetition ( 繰返し_好み ; Get ( 計算式繰り返し位置番号 ) ) = Last (繰返し_好み) ; Get ( 計算式繰り返し位置番号 ) ;
""
)
返ってくる結果が変わります。
Last関数で繰り返しの最後の行に入っている値を取得、
GetRepetition関数とGet ( 計算式繰り返し位置番号 )を使って指定した行の値を取得しています。
最後の行に入っている値と指定した行の値が同じ場合のみ、
Get ( 計算式繰り返し位置番号 )で位置を返すようにしています。
この結果が返ってくる計算フィールドは残しておきます。
フィールド名を「繰返し_値有Last行数表示_cn」としました。
最後に、こんな計算フィールドを作って入力状況を表示できるようにしてみました。
上記で作った計算フィールド、
「値有りの繰返し行カウント_cn」と「繰返し_値有Last行数表示_cn」を使っています。
Let ( [
$f_最後行数 = Last ( 繰返し_値有Last行数表示_cn )
] ;
Case (
$f_最後行数 = 値有りの繰返し行カウント_cn ; "空白行はありません" ;
$f_最後行数 ≠ 値有りの繰返し行カウント_cn ; "空白行があります" ;
) //case
) //let
これで空白行があるかないかがわかるようになりました(^^)
毎回のことで申し訳ございませんが、、、
今回もご紹介した内容についてのご質問などはお受けしておりません<(_ _)>
また、お試しになる場合は、ご自身の責任でお試しくださいますようお願いいたします。
それと、相変わらず打たれ弱いので、ツッコミなどはこっそりメールでお願いします。
今回も自分用のメモ帳におつきあいくださいましてありがとうございました。
どなたかのお役に立つことができればうれしいです(^^)
追記:
繰り返しフィールドは便利だと思いますが、
使い方を間違えると後々困ることがあるのも忘れないでいただければと思います。
私が繰り返しフィールドを便利に思って使っているのは
まだファイルメーカーがカード型データベースでポータルなんて用意されておらず、
請求書の明細は「繰り返しフィールド」で作るのが当たり前…
そんな頃からのユーザーとして、
お世話になった「繰り返しフィールド」が悪の根源のように言われるのが悲しいから…
というのもあるのかもしれません^^;