初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-07-01 09:23:59

茶色
Guest

ひと月の作成スクリプトで無限ループに

Win7でFmp11です。

集計フィールドで「日付」の最大値を「最終日付」とし
ひと月の作成をスクリプトで行うため下記のようにしましたが
無限ループに陥ってしましました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
全レコード表示
レコードのソート [記憶する;ダイアログなし]
レコード/検索条件/ページへ移動 [最後の]
変数を設定 [
$変数;値;Date ( Month ( 一日一レコード::最終日付) + 1 ; 1 ; Year (一日一レコード::最終日付) ]
Loop
新規レコード/検索条件
フィールド設定 [一日一レコード::日付;$変数 ]
変数を設定 [$変数;値;$変数 + 1]
Exit Loop If [
      一日一レコード::日付 = Date (一日一レコード::最終日付) + 2 ; 0 ; Year ( 一日一レコード::最終日         付 )) ]
End Loop
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
原因がつかめません。

#2 2014-07-01 09:30:09

tim
Guest

Re: ひと月の作成スクリプトで無限ループに

一日一レコード::最終日付 はグローバルになってますか?

#3 2014-07-01 11:00:05

チポ
Member

Re: ひと月の作成スクリプトで無限ループに

集計フィールドで「日付」の最大値を「最終日付」とし

これが集計フィールドだとグローバルに出来ませんよね。

Exit Loop If
の条件を変数で計算させればいいのでは。


集計フィールドだと、それを引数にするには
  GetSummary関数
が必要ですよ。


もっと簡単には、
日付の入力値の自動化・既存値置換えで
Self + 1
として、必要回数レコード複製でいいでしょう。

Offline

#4 2014-07-01 11:32:15

茶色
Guest

Re: ひと月の作成スクリプトで無限ループに

timさま。
ありがとうございす。

集計フィールドはグローバルにできなかったので
計算フィールド「最終日付複写」として、
これをグローバルにして「最終日付」に変えて実行しましたが
やはり無限ループでになります。
Get(日付) では何事もなくスクリプトが走るのに...

チポさま。
ありがとうございます。

なにせ、コピペで作成したものですから
仰ることが、すぐには理解でしません。
もう少し、紐解いて頂けませんでしょうか?

#5 2014-07-01 11:38:39

Moz
Member

Re: ひと月の作成スクリプトで無限ループに

スクリプトが実行される際に対象レコードはちゃんとありますか?
対象レコードが0なら最大値は取れないですよね。

複写のフィールドをわざわざ作らなくても最大値を変数に取得するだけで済むのでは?

とりあえずサンプル
http://yahoo.jp/box/YBLIVH

Last edited by Moz (2014-07-01 11:47:31)

Offline

#6 2014-07-01 12:38:24

茶色
Guest

Re: ひと月の作成スクリプトで無限ループに

Mozさん
ありがとうございます。

早速にサンプルまで作って頂いて恐縮します。

" 最大値を変数に取得する "
こんな方法でグローバルフィールドに出来るのですね。

みなさん。ありがとうございました。 「解決」です。

#7 2014-07-01 12:39:31

tim
Guest

Re: ひと月の作成スクリプトで無限ループに

集計ってとこを見落としてました。
集計ではレコードを作るたびにそれが「最終」に変わってしまうから無限ループになります。
既に回答が出てますが、Loopの前に終了条件を変数に設定する。

変数を使わない方法
全レコード表示
レコードのソート [記憶する;ダイアログなし]
レコード/検索条件/ページへ移動 [最後の]
フィールドへ移動[一日一レコード::日付]
Loop
新規レコード/検索条件
直前のレコードから挿入[一日一レコード::日付]
フィールド設定 [一日一レコード::日付;Self+1 ]
Exit Loop If [Day(一日一レコード::日付 + 1) = 1]
End Loop

#8 2014-07-01 14:31:40

茶色
Guest

Re: ひと月の作成スクリプトで無限ループに

timさん
ありがとうございます。

フィールド設定 [一日一レコード::日付;Self+1 ]

上記はSelf指定のところで
" この式では、この関数は使用できません "
となって以後進めませんでした。

#9 2014-07-01 15:29:30

tim
Guest

Re: ひと月の作成スクリプトで無限ループに

フィールド設定 [一日一レコード::日付;一日一レコード::日付+1 ]
です。手書きで横着したら間違えた。

#10 2014-07-01 15:46:59

チポ
Member

Re: ひと月の作成スクリプトで無限ループに

日付フィールドの入力値の自動化で
計算式・既存値置き換えとして、その計算式
  Self + 1
として、


スクリプト

  全レコード表示
  レコードのソート
  レコード/検索条件/ページへ移動 [最後の]
  Loop
    レコード複製
    Exit Loop If [ Year ( 日付 + 1 ) ≠ Year ( 日付 ) ]
  End Loop

あえて年末までのレコード作成としてみました。

考え方を理解してください。


入力値の自動化設定してあれば、スクリプトを使わずとも、
   
Ctrl+D(Win)
command+D(Mac)
を押し続ければ出来てしまいますよ。

Last edited by チポ (2014-07-01 15:52:04)

Offline

#11 2014-07-01 16:51:53

茶色
Guest

Re: ひと月の作成スクリプトで無限ループに

timさん。
チポさん。
ありがとうございます。

いろいろな方法があるものですね。
後学の糧にしたいと思います。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 10 queries executed - Memory usage: 568.03 KiB (Peak: 573.28 KiB) ]