みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win7でFmp11です。
集計フィールドで「日付」の最大値を「最終日付」とし
ひと月の作成をスクリプトで行うため下記のようにしましたが
無限ループに陥ってしましました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
全レコード表示
レコードのソート [記憶する;ダイアログなし]
レコード/検索条件/ページへ移動 [最後の]
変数を設定 [
$変数;値;Date ( Month ( 一日一レコード::最終日付) + 1 ; 1 ; Year (一日一レコード::最終日付) ]
Loop
新規レコード/検索条件
フィールド設定 [一日一レコード::日付;$変数 ]
変数を設定 [$変数;値;$変数 + 1]
Exit Loop If [
一日一レコード::日付 = Date (一日一レコード::最終日付) + 2 ; 0 ; Year ( 一日一レコード::最終日 付 )) ]
End Loop
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
原因がつかめません。
一日一レコード::最終日付 はグローバルになってますか?
集計フィールドで「日付」の最大値を「最終日付」とし
これが集計フィールドだとグローバルに出来ませんよね。
Exit Loop If
の条件を変数で計算させればいいのでは。
集計フィールドだと、それを引数にするには
GetSummary関数
が必要ですよ。
もっと簡単には、
日付の入力値の自動化・既存値置換えで
Self + 1
として、必要回数レコード複製でいいでしょう。
Offline
timさま。
ありがとうございす。
集計フィールドはグローバルにできなかったので
計算フィールド「最終日付複写」として、
これをグローバルにして「最終日付」に変えて実行しましたが
やはり無限ループでになります。
Get(日付) では何事もなくスクリプトが走るのに...
チポさま。
ありがとうございます。
なにせ、コピペで作成したものですから
仰ることが、すぐには理解でしません。
もう少し、紐解いて頂けませんでしょうか?
スクリプトが実行される際に対象レコードはちゃんとありますか?
対象レコードが0なら最大値は取れないですよね。
複写のフィールドをわざわざ作らなくても最大値を変数に取得するだけで済むのでは?
とりあえずサンプル
http://yahoo.jp/box/YBLIVH
Last edited by Moz (2014-07-01 11:47:31)
Offline
Mozさん
ありがとうございます。
早速にサンプルまで作って頂いて恐縮します。
" 最大値を変数に取得する "
こんな方法でグローバルフィールドに出来るのですね。
みなさん。ありがとうございました。 「解決」です。
集計ってとこを見落としてました。
集計ではレコードを作るたびにそれが「最終」に変わってしまうから無限ループになります。
既に回答が出てますが、Loopの前に終了条件を変数に設定する。
変数を使わない方法
全レコード表示
レコードのソート [記憶する;ダイアログなし]
レコード/検索条件/ページへ移動 [最後の]
フィールドへ移動[一日一レコード::日付]
Loop
新規レコード/検索条件
直前のレコードから挿入[一日一レコード::日付]
フィールド設定 [一日一レコード::日付;Self+1 ]
Exit Loop If [Day(一日一レコード::日付 + 1) = 1]
End Loop
timさん
ありがとうございます。
フィールド設定 [一日一レコード::日付;Self+1 ]
上記はSelf指定のところで
" この式では、この関数は使用できません "
となって以後進めませんでした。
フィールド設定 [一日一レコード::日付;一日一レコード::日付+1 ]
です。手書きで横着したら間違えた。
日付フィールドの入力値の自動化で
計算式・既存値置き換えとして、その計算式
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
timさん。
チポさん。
ありがとうございます。
いろいろな方法があるものですね。
後学の糧にしたいと思います。
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 567.74 KiB (Peak: 582.63 KiB) ]