みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Filemaker Pro 12を使っています。
もう何年も動いていたシステムで、以下のスクリプトで無限ループになってしまうようになりました。
下記コードの「カスタムダイアログを表示」を有効にしていると、何度もこのLoopが回ります。
いままでは一度最後まで行けばLoopから抜けていました。
この間スクリプトの変更はしていません。
ポータル内の行へ移動 [ 最初の]
Loop
// カスタムダイアログを表示 [メッセージ: 見積請求データ::キー & 見積請求データ::順序 & 見積請求データ::摘要; デフォルトボタン:「OK」,確定: 「はい」;ボタン2: 「キャンセル」,確定:「いいえ」]
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
ポータル内の行を削除 [ダイアログなし]
End If
ポータル内の行へ移動 [ 次の; 最後まできたら終了]
End Loop
どなたかお気づきの点がありましたら教えてください。
よろしくお願いします。
リレーションシップの設定でレコードの作成を許可にしていませんか?
カスタムダイアログにOKとキャンセルがあるのにGet(最終メッセージ選択)による
分岐が無いのも変ですし、
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
の条件に合致した行の場合、行は削除されてしまうので現在選択している関連レコ
ードは無くなります。
無限Loopになっているのではなく、また1行目に戻って繰り返しているだけで
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
の条件に合致する関連レコードが無くなったら終わるのでは?
でも以前は正常だったというのが?。
カスタムダイアログステップを追加しただけなのですか。
Offline
お返事ありがとうございます。
リレーションシップの設定でレコードの作成を許可にしていませんか?
はい。リレーションシップ編集のダイアログで、
ポータル内に表示している方のテーブルの
「このリレーションシップを使用して、このテーブルでのレコードの作成を許可」にチェックを入れています。
しかし、この設定は以前から変わらず、数日前までは何年間も問題なく動いておりましたし、
試しにこのチェックを外してみましたが、症状は変わりませんでした。
カスタムダイアログを行を移動する都度表示する意味があるのかな?
Offline
お返事ありがとうございます。
カスタムダイアログにOKとキャンセルがあるのにGet(最終メッセージ選択)による
分岐が無いのも変ですし、
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
の条件に合致した行の場合、行は削除されてしまうので現在選択している関連レコ
ードは無くなります。無限Loopになっているのではなく、また1行目に戻って繰り返しているだけで
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
の条件に合致する関連レコードが無くなったら終わるのでは?
でも以前は正常だったというのが?。
カスタムダイアログステップを追加しただけなのですか。
カスタムダイアログのステップのあとでGet(最終メッセージ選択)で値を取得していないのは、
スクリプトが昨日から急にフリーズしたようになったので、このループを突き止めて、
この中を通っているかを確かめるために入れたものです。何を押してもなにもなりません。
今までこのloopを何度回っていたかは確認していませんが、今までは
ポータル内の行へ移動 [ 次の; 最後まできたら終了]
で必ず抜けていたと思われるのですが、このステップがあるのにloopを回り続けるということが
あるのでしょうか…(実際今がそうなのですが)
ポータル内の行を削除 [ダイアログなし]
が実行されると、ポータルの選択が解除されるようなので、
削除のあと、以下が実行されると、ポータルの先頭に戻っているようですが.....。
ポータル内の行へ移動 [ 次の; 最後まできたら終了]
このスクリプトにこだわらず、
テーブル:見積請求データ
で、検索して削除した方が良いかと思います。
Offline
ポータル内の行を削除 [ダイアログなし]
が実行されると、ポータルの選択が解除されるようなので、
削除のあと、以下が実行されると、ポータルの先頭に戻っているようですが.....。
ポータル内の行へ移動 [ 次の; 最後まできたら終了]
このスクリプトにこだわらず、
テーブル:見積請求データ
で、検索して削除した方が良いかと思います。
お返事ありがとうございます。
ポータル操作ではなくて、直接対象テーブルを絞り込んで対象レコード削除の方がよいということですね。
確かにそのようにすれば確実ですしそれほどの修正ではないと思うのでその方向でやってみます。
今まで動いていたのに急に挙動が変わったので、どなたか同じ事例があるかと思い質問させていただきました。
本当に無限Loopになっているのか確認してみては?
カスタムダイアログが無効の場合でも
If [ 見積請求データ::順序 ≥ 8000 and 見積請求データ::順序 < 9000 ]
の関連レコードに移った時にその行番号を変数に入れて、削除後に次の行に
移動ではなく、変数行に移動した方がいいと思いますけど。
Offline
[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 521.48 KiB (Peak: 526.02 KiB) ]