みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
FMP19(Win)での質問です。
テーブルAの、ある日付フィールドを繰り返しフィールドとして
例えば 22/10/24 22/10/25 22/10/26
と設定されていて
テーブルBに
フィールド1 フィールド2
22/10/25 ○
というレコードがあった場合、
テーブルBのフィールド2が○になっている日付に相当するテーブルAの繰り返しフィールド位置を
条件付き書式で着色したいのですが、やり方がよくわかりません。
現状のリレーションは
テーブルA::日付フィールド = テーブルB::フィールド1
条件式はテーブルB::フィールド2 = "○"
といった感じにしております。
ご教授よろしくおねがいします
Offline
テーブルB には、複数のレコードができますよ。その中に、フィールド2 が○以外のもの(空白を含めて)も出てくると思います。その状態ですと、まあまあ面倒です。
一つの方法として、テーブルB に、フィールド2_ という計算フィールドを作り、繰り返し(繰り返し数はテーブルAの日付の繰り返し数以上)にしておきます。計算式は、 フィールド2[1] です。
テーブルA に計算フィールドを作り、Lookup ( テーブルB::フィールド2_ ) としておきます。条件付き書式は、このフィールドを参照します。
ひょっとしたら、条件付き書式 で、Lookup ( テーブルB::フィールド2_ ) = "○" とすればいいのかもしれませんので、試してみてください。
Offline
条件付書式の計算式で直接SQLで参照してしまうと難しいことは考えなくてもいいですが、パフォーマンスはどうかな。。。
ExecuteSQL("
SELECT 1
FROM \"テーブルB\"
WHERE \"フィールド1\"=?
AND \"フィールド2\"='〇'
";"";"";Self)
Shinさん、
毎度ありがとうございます。
両方やってみたのですが・・・どうもうまくいきません。
実際はテーブルBのフィールド2に値が有った場合にテーブルAの繰り返しフィールドの該当要素を変色させようというものなのですが
(="○"ではなくて≠"")
どちらのやり方をしてもテーブルAの日付不イールドのすべての繰り返しが変色してしまいます。
テーブルAの新設した計算繰り返しフィールドCの内容がテーブルBのフィールド2に対応するイメージだったのですが
フィールドCを表示してみると何も見えません。
条件付き書式の中へ計算式を入れてしまうのはダメでした。別に計算フィールドをもたせるといいですよ。各計算フィールドは、非保存にしておきます。
https://www.dropbox.com/s/api56k97o45k4 … 2.zip?dl=0
Last edited by Shin (2023-07-15 17:03:53)
Offline
>(="○"ではなくて≠"")
それなら不等号でなく
AND \"フィールド2\" IS NOT NULL
です。
(データ数少ないですが動作確認済みです)
Shinさん、
サンプルありがとうございます。
色を変えたかったのがテーブルAの日付の方だったので^^;
ちょっとやってみます。
Offline
Shinさん、
所望の動作が確認できました。「内容」はテキストフィールドで実験しました。
その場合、サンプル中の条件付き書式の式が
統合テーブル::内容_
だったのですが、これだと「内容」が半角全角の数字以外の場合日付フィールドが発火してくれません(なぜでしょう??)
not IsEmpty( 統合テーブル::内容_ )
にすると文字列でも発火してくれるようになりました。
Offline
計算フィールドが数字を返しているからでしょう。
Offline
ところが・・・
計算フィールドは全て(今回は3つ)テキストを返しているんですねぇ
だから分からないのです
いや、
>「内容」が半角全角の数字以外の場合
と言ってるじゃないですか。
「数字の場合は発火する」のは多分数字が0でないからで、当たり前では?
「条件付き書式の式」は論理値を必要とするので論理値に解釈しますから、式内のフィールドタイプは関係ないです。
そういえば、SQLで
="○"ではなくて≠""
にした場合(実際は≠""でなく≠''ですが)
計算結果がエラーになってます。
その場合に書式が適用されることは、条件付書式のヘルプに書いてないみたいですね。
「オブジェクトを隠す」の方には明記されてます。
https://help.claris.com/ja/pro-help/con … jects.html
「計算式の一部または全部を評価できない場合 (「?」が返される)、オブジェクトは非表示になります。」
これって一時は「表示」の実装になってて、セキュリティ上問題になって変更された記憶があります。
同じことが条件付書式にも反映されてるんだと思います。
データビューアでも?は真です。
1/0 は ?
GetAsBoolean(1/0) は 1
GetAsBoolean("?") も 1 なので、任意のテキストをそのまま論理値に変換するのは危険です。
GetAsBoolean("a") は 0
GetAsBoolean("a1") は 1
GetAsBoolean("a?") は 0
いや、
>「内容」が半角全角の数字以外の場合
と言ってるじゃないですか。
「数字の場合は発火する」のは多分数字が0でないからで、当たり前では?「条件付き書式の式」は論理値を必要とするので論理値に解釈しますから、式内のフィールドタイプは関係ないです。
これ、確かに条件付きの式の評価は論理式なのでおっしゃる通り当たり前ですね。
0を入れてみると確かに発火しないのでフィールドが有効かの論理式でないと正しく動かない。
今回の例だと必ず文字列か空白でしたので気付きましたが(遅い^^)おかげさまでスッキリしました。
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 571.24 KiB (Peak: 588.15 KiB) ]