みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんにちは。
Filemaker Pro 17を使用している初心者です。
リレーションを利用して
ポータルに関連レコードを出したいと思っています。
ですが完全一致ではないレコードを拾うことは可能でしょうか?
例えば
テーブル1 テーブル2
山田 山田太郎
佐藤 山田花子
渡辺 佐藤一
渡辺次郎
小山田三郎
このような場合、テーブル1のレイアウトで
最初のレコード(山田)にいる場合
テーブル2の山田さん2名、小山田さん1名をポータルに表示したいです。
何卒よろしくお願い致します。
Offline
テーブル1に計算フィールドを追加してそれでリレーションすれば可能です。
ExecuteSQL("SELECT f
FROM \"テーブル2\"
WHERE f LIKE ?
";"";"";"%" & f & "%")
fはフィールド名です
ポータルに表示だけでいいのなら、
フィルタ条件を
PatternCount (テーブル2::姓名 ; テーブル1::姓 )
とすればいいでしょう。
Offline
今のところポータル表示だけで構いません。
しかし、以前ポータルのフィルタ機能を使った際に
かなり動きが悪くなった事があり少し不安です。
レコード数が多かったり、非保存のフィールドがあったせいかもしれませんが・・・
フィルタをかけるときに注意することはありますか?
Offline
フィルタだと、テーブル2の全レコードで毎回その計算をすることになるので、レコード数が多ければそれなりに時間がかかります。
私が書いたSQLのも、計算結果保存だとテーブル2で変更があった場合に対応できないので、非保存にするか、テーブル1のレコード(厳密にはそのポータル)を表示するときに再計算する必要があります。(非保存なのはテーブル1の方なので、2のレコード数は無関係)
しかし、WHEREの検索に索引が使えないので、結局テーブル2のレコード数にも依存しそう。
日本語の検索は自動的に部分一致(山田の検索で小山田もヒットする)になって、それなりの速度は出てたような気がしますが。
ありがとうございました。
期待通りの動きは出来たので、また重くなるようだったら
根本からやり方を変えてみたいと思います。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 551.73 KiB (Peak: 579.52 KiB) ]