みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
新しい掲示板を作っていただきましてありがとうございます。
今後もよろしくお願いいたします。
環境:Win7 FMPro12Adv
テーブル名:Staff
フィールド名:Name
フィールド名:Switch
テーブル名:Schedule
フィールド名:Name
フィールド名:VL_Name(ExecuteSQLの計算フィールド)
ExecuteSQLを使用してStaff::Switchがonの場合にはSchedule::NameにStaff::Nameが表示される動的値一覧を作ってみようと思い以下の計算式を作成してみました。
ExecuteSQL ( "SELECT Name FROM Staff WHERE Switch = ?" ; "" ; "" ; "on" )
この場合、Staff::SwitchをonするとStaff::Nameは値一覧に表示されました。
しかし、Staff::Switchをブランクにしても値一覧に表示されてしまいます。
まだExecuteSQLがよく分かっていないので以下の式にしてみました。
ExecuteSQL ( "SELECT Name FROM Staff WHERE Switch = 'on'" ; "" ; "" )
挙動が同じだけで意味はありませんでした。この2式の違いもよく分かっていませんが・・・
索引の問題かと思い、Schedule::VL_Nameの索引をフィールド定義にてクリアすると期待通り値一覧に表示されなくなりました。
この挙動からするとExecuteSQLを動的値一覧的に使用することには無理があるのでしょうか?
Last edited by jj_akichan (2013-08-26 11:10:07)
Offline
計算結果を保存しないと値一覧に使えないと思いますが、そうするとSwitchを変更しても計算結果が変わらないので動的になりません。
Staffテーブルのグローバルフィールドにして、Evaluate(ExecuteSQL(~~);Switch)とか。
しかしレコードの追加(はいいのかな?)・削除時には反映されそうにない...
ゲスト様
やはり動的には使えないですよね。
う~ん、もう少し考えてみます。
計算結果を保存しないと値一覧に使えないと思いますが、そうするとSwitchを変更しても計算結果が変わらないので動的になりません。
Staffテーブルのグローバルフィールドにして、Evaluate(ExecuteSQL(~~);Switch)とか。
しかしレコードの追加(はいいのかな?)・削除時には反映されそうにない...
Offline
この例だと、Staffテーブルのフィールドにして
Case(Swith="on";Name)
でいいので、ExecuteSQLの必要性がないですし。
ゲスト様
すいません、ExecuteSQL使ってみたかったので。
この例だと、Staffテーブルのフィールドにして
Case(Swith="on";Name)
でいいので、ExecuteSQLの必要性がないですし。
Offline
元々はScheduleの側のフィールド値によって一覧が変わるのが「動的」と言ってるので、
この例で言うとSchedule側にonとかoffとか入れるフィールドがあって、それに従って変化させればいいんでしょうけど
「値一覧を表示する前」というトリガが無いので、そのタイミングでExecuteSQLを計算させる方法がないと思います。
SQLExecuter様
Scheduleテーブル側のフィールド値によって値一覧を変えるわけではないので動的という言葉を使うか迷いました。
やはりStaffテーブルのフィールド値の変更によって値一覧の内容を制御するのは難しそうですね。
みなさまありがとうございました。
Offline
FM12使っていないので、
ExecuteSQL関数
分かりませんが。。
Scheduleテーブルでグローバルフィールドを作り、onと入力。
これと、Switchとでリレーションして、その動的値一覧でいいでしょう。
Offline
チポ様
ありがとうございます。
ご指南いただきました方法で作ることにいたしました。
FM12使っていないので、
ExecuteSQL関数
分かりませんが。。Scheduleテーブルでグローバルフィールドを作り、onと入力。
これと、Switchとでリレーションして、その動的値一覧でいいでしょう。
Offline
太古の未解決の話題ですが、今でも興味深いテーマだったので、
解析したところ解法はありますので、レス記帳しておきます。
テーブル名:Staff
フィールド名:Name
フィールド名:Switch
フィールド名:gVL_Name(ExecuteSQLのグローバル・計算フィールド)
計算式:(結果:グローバル格納)
ExecuteSQL(
"
SELECT ""Name""
FROM ""Staff""
WHERE ""Switch""='on'
"
; ""
; ¶
)
& Left(Name & Switch; 0)
テーブル名:Schedule
フィールド名:Name
フィールド名:VL_Name(計算フィールド、式:Staff::gVL_Name)(※グローバルフィールドの関連参照は、リレーション不要)
Offline
SQL使わないでできるのだから、無理しなくていいのでは。。。
「動的値一覧」ではなく、他のテーブルのフィールド値のリストを表示したい、が課題?
SQL使わないでできるのだから、無理しなくていいのでは。。。
「動的値一覧」ではなく、他のテーブルのフィールド値のリストを表示したい、が課題?
もし質問者の真意が、それでも敢えて『 ExecuteSQL計算式による「動的値一覧」機能の実装』
と云う事なら、>#10案でなく、こんなこと?
テーブル名:Staff
フィールド名:Name
フィールド名:Switch
テーブル名:Schedule
フィールド名:gSwitch (グローバルフィールド)
フィールド名:gVL_Name(ExecuteSQLのグローバル・計算フィールド)
計算式:(結果:グローバル格納)
ExecuteSQL(
"
SELECT DISTINCT(""Name"")
FROM ""Staff""
WHERE ""Switch""=?
"
; ""
; ¶
; gSwitch
)
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 525.15 KiB (Peak: 545.69 KiB) ]