みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。
繰り返しフィールドで1~29に設定した項目が2つあります(それぞれ項目A、項目Bとします)。
1行目の項目Aが空白でなく1行目の項目Bが空白のとき、不正行とします。
同様に2行目の項目Aが空白でなく2行目の項目Bが空白のとき、不正行とします。
以降29行目までを判断し、不正行が1つでもあるときはボタンを押した際にエラーメッセージを返したいと考えております。
条件式としては、
if((項目A[1] ≠ "" and 項目B[1] = "" ) or (項目A[2] ≠ "" and 項目B[2] = "" ) or ...(省略)... or (項目A[28] ≠ "" and 項目B[28] = "" ) or (項目A[29] ≠ "" and 項目B[29] = "" ))
カスタムダイアログを表示 ※OKボタンのみ、データの修正を促す警告メッセージを表示します
全スクリプトを終了
else
(正常時は従前より稼働している処理をそのまま続行します)
end if
上記の内容でよろしいでしょうか。
地道に項目を繰り返し回数分だけ指定しつづけるのもあまりうまくないような気がしております。
もう少しスマートな記述方法があればご教授いただけると幸いです。
よろしくお願いいたします。
Last edited by Dunbine Rush (2019-05-20 14:13:12)
Offline
● If[※再帰ループ式]
と※下式へ変更
Let([
$i=0;
$res="";
$FNC=
"Case($i=29; $res;
Let([
$i=$i+1;
#add=(テーブル::項目A[$i]<>"""" and テーブル::項目B[$i]="""");
$res=Sum($res;#add)
]; Evaluate($FNC))
)"
];
Evaluate($FNC)
)
Offline
同じ繰り返し数のフィールドを作り、
各繰り返し位置ごとの判定を計算入力、
そのフィールドで判断出来るのでは。
判定結果が
正なら 0
不正なら 1
とすれば簡単に分かりますよね。
Offline
再帰式で作れば短くはできますが、力技で入れてしまっても、結果的には同じです。
別案として、計算繰り返しフィールドを別に作り、それを合計する、という方法もあります。
最善案は、その入力を別テーブルへ入力することにします。格段に楽になります。そちらのテーブルで各入力を評価し集計するので、非常に単純な構造になります。また、フィールドの制限を使えば、入力しながらのエラーが出せますので、入力がスムーズになるかもしれません。
Offline
本案件の対応で、最善の「ループ式」が難しいなら、次の手は「ループスクリプト」でしょう。
「繰り返しフィールド」の構造追加は、そのまた次でしょう。
【ループスクリプト例】
・ 変数を設定 [$i; 値:0]
・ 変数を設定 [$res; 値:""]
・Loop
・ Exit Loop If [$i=29]
・ 変数を設定 [$i; 値:$i+1]
・ 変数を設定 [$add; 値:test::項目A[$i]<>"" and test::項目B[$i]=""]
・ 変数を設定 [$res; 値:Sum($res; $add)]
・End Loop
・If [$res]
・ カスタムダイアログを表示 [※OKボタンのみ、データの修正を促す警告メッセージを表示]
・ 全スクリプトを終了
・Else
・ スクリプト続行 (正常時は従前より稼働している処理をそのまま続行します)
・End If
Last edited by Hiro (2019-05-20 19:48:57)
Offline
状況にもよるでしょうが、私は、
フィールドを増やしてでも、計算でできるのならスクリプトは使いませんね。
再起式、
ここに質問してくる方ですぐに理解、応用出来る方は少ないかと思い、
簡単に考えられる方法を提示したつもりです。
私も使いますが、Hiroさんのレベルにはとてもとても、、
Offline
難易度と反比例でしょうね。
この掲示板の質問者の平均的なレベルだと、フィールド追加か、力技の長い計算式だと思いますが。
Offline
Pages: 1
[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 517.24 KiB (Peak: 521.78 KiB) ]