みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win8、FM12、FileMakerGo12
アンケートを作っており、順にいくつか問いてもらう予定です。
個人識別にIDとアンケート番号とで被らないように抜けが無いように設定したい。
スクリプトの組み方の相談です。ファイルの中身、スクリプト記載のさらに下記に相談内容を記載。
ファイルの中身は下記のように。
テーブル:表紙
フィールド:ID(数字、グローバル)
フィールド:記載日(日付、自動、グローバル)
テーブル:アンケート用紙1
フィールド:アンケート番号1(数字)
フィールド:アンケート内容A(テキスト)
テーブル:アンケート用紙2
フィールド:アンケート番号2(数字)
フィールド:アンケート内容B(テキスト)
テーブル:アンケート用紙3
フィールド:アンケート番号3(数字)
フィールド:アンケート内容C(テキスト)
テーブル:記録
フィールド:ID(数字)
フィールド:アンケート番号(数字)
フィールド:記載日(日付)
フィールド:記載時間(時刻)
「テーブル:表紙」でID入力→スクリプト含むボタン設置→「テーブル:記録」より過去に行ったアンケート番号を確認して次のアンケート用紙を表示、としたい。
「テーブル:記録」では、ID:1がアンケート用紙1を11/1に、アンケート用紙2は11/16に行っており、アンケート用紙3はまだである。
今日11/19に、表紙でID:1を入力し次へと進めば。アンケート用紙3を表示して、回答してもらう。
スクリプト(長くてすみません)
エラー処理[オン]
変数を設定[$No;値:4]
レイアウト切り替え[テーブル:記録]
Loop
検索モード
フィールド設定[記録::ID ; 表紙::ID]
変数設定[$No;値:$No-1]
フィールド設定[記録::アンケート番号;$No]
検索実行
If[Get(最終エラー)=401] //一切記録なければ、アンケートは初めから。
レイアウト切り替え[アンケート用紙1]
新規レコード
フィールド設定[アンケート用紙1::ID ; 表紙::ID]
Else
If[記録::アンケート番号=3] //アンケート用紙3まで記載済であれば、全回答済み。と
レイアウト切り替え[表紙]
カスタムダイアログ["終了";"すべてのアンケートを回答済みです。ありがとうございました。"]
現在のスクリプト終了
Else
If[記録::アンケート番号=2] //記録でアンケート番号2まで終えていれば、アンケート用紙3へ移動
レイアウト切り替え[アンケート用紙3]
新規レコード
フィールド設定[アンケート用紙3::ID ; 表紙::ID]
現在のスクリプト終了
Else
If[記録::アンケート番号=1]
レイアウト切り替え[アンケート用紙2]
新規レコード
フィールド設定[アンケート用紙2::ID ; 表紙::ID]
現在のスクリプト終了
End If
End If
End If
End If
Exit Loop If[$No=3] //Loopでアンケートは3回目までチェックして終わる。
End Loop
スクリプトの相談は4つ
1、
困っている点が、アンケート2つ3つと終えた方が、検索結果が正常に出ません。
例えば、アンケート3つ目も終えたのに、アンケート用紙3や用紙2へと誘導されたりします。人によっては、カスタムダイアログ終了が表示する場合も。
2、
また、見ての通りアンケート3回分であるため力技でスクリプト組んでいますが、これが10回分20回分と増えてくるとかなり大変なことになってしまいます。
長すぎると、動作も重くなるかと思うので、それを回避するため、検索実行後のIf関数からの文をどう組めば良いのでしょうか?
3、
Get(最終エラー)=401より、Get(最終エラー)≠0の方が良いのか?
4、
Loopの使い方が、間違えている気がするのですが、組み方は大丈夫なのでしょうか?
もしくは、テーブルの組み方から変更した方が良いのか?
テーブル:記録
フィールド:ID(数字)
フィールド:アンケート番号1(数字)
フィールド:記載日1(日付)
フィールド:記載時間1(時刻)
フィールド:アンケート番号2(数字)
フィールド:記載日2(日付)
フィールド:記載時間2(時刻)
・・・・3も。
このような管理の方が良いのか?
よろしくお願いします。
長い!長いよぅ
3回で終わりじゃないみたいなので、回数が増えてもフィールドが増えないように作るのが普通と思います。
アンケートテーブル
番号
質問
個人テーブル
ID
氏名?
回答テーブル
ID
番号
回答
日時
アンケート番号3から検索しているのですから、
2までだったら、最初の
> If[Get(最終エラー)=401]
これに引っかかっちゃうでしょう。
アンケート番号で検索することで面倒にしているのでは。
そのIDのアンケート番号を見て次の処理をすればいいでしょう。
Offline
見落としていた
> Exit Loop If[$No=3] //Loopでアンケートは3回目までチェックして終わる。
3から始めているので、Loop1回で終わっていますよ。
Offline
himaganeeさん、ごめん。
長い・・・わかってたんだけど、短くできるだけの腕がないから長くなって・・・
作ったファイルを載せようかと思ったのですが、以前に載せるより書いてと言われたので。
>回数が増えてもフィールドが増えないように作るのが普通と思います。
今作ったの固定概念が出来ているので、少し落ち着いてから考えてみます。
設問集を作っておいて、アンケート番号を打てば、それを引っ張って表示して回答してもらう・・・ですか。
ipadでFileMakerGoで、チェックしてもうので、そこが出来るのかどうか。
チポさんへ
>> If[Get(最終エラー)=401]
>これに引っかかっちゃうでしょう。
回答済みの少ない人数から引き抜いていけば良いかと。
IDも番号がなければ、 If[Get(最終エラー)=401]でつかまって用紙1に、
次に用紙3書いてるかどうか、用紙2は?と順におってるつもりでしたが。
>3から始めているので、Loop1回で終わっていますよ。
減らすように書いたから、3回→0回にしないといけませんね。ありがとうございます。
変更したところ、全回答していればカスタマイズログ終了出るようになりました。
If[記録::アンケート番号=2]がスルーされているようで、用紙1記載済み用紙2記載済みでも用紙2へ案内されてますね。
回答の内容によって、次の設問を変更したり、分岐したり、という処理がなければ、設問テーブルの中から設問番号で内容を表示させて、別に回答を入れておくテーブルを持たせておくと良いでしょう。
FMGとiPadを使った同様のシステムで、分岐ありの複雑なシステムが、どこかの病院で動いていますよ。http://www.juppo.co.jp/juppo/solution/jirei14.html
Offline
Shinさんへ
ご紹介ありがとうございます。
>回答の内容によって、次の設問を変更したり、分岐したり、という処理がなければ
いずれは、それも出来るようにはなりたいと思っていますが、まだまだ力不足なためそこまでは至らず。
まずは出来そうなところからと手をつけています。
>設問テーブルの中から設問番号で内容を表示させて、別に回答を入れておくテーブルを持たせておくと良いでしょう。
himaganeeさんからも、ご提案いただき、そのように作り変えてみたいと思います。
いったん、解決済みとさせていただきます。また、行詰まりましたら質問するかと思いますが、
よろしくお願いいたします。ありがとうございました。
Shinさん、himaganeeさんへ
お二人のおかげで、出来ました。
余計な物も削れて、テーブル数もスクリプトも半分以下になり、かなりスッキリと。
アンケートの種類が増えても、Loop内に変数使って組み込めたので、10個20個増やしても怖くないです。一安心。
回答によって質問変更へと、次のステップへ進めていきたいと思います。こちらは、どのように組めば良いか発想もまだ出来ないので気長に頑張ります。
ありがとうございました。
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 586.34 KiB (Peak: 603.24 KiB) ]