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

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

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

You are not logged in.

Announcement

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


#1 2014-03-15 02:11:36

bakabon
Guest

Loopでレコードを対象外にしたい

お助けください。環境はFM12、ウィンドウ7 です。

一覧に並んだグループデータ番号(同じグループ番号が複数)あり、
ひとつのグループ番号レコードだけを表示させたくて
下記の対象外スクリプトで組んだのですが、うまくいきません。
実行結果は、ひとつ、ふたつ 同じグルー・プ番号が付きます。
どこを変えればうまく機能しますでしょうか?

グループ番号でソート
最初のレコードへ移動
変数を設定 [$Bangou; テーブル: グループ番号]
次のレコードへ移動
Loop
if $Bangou = テーブル: グループ番号
     レコードを対象外に
else
    変数を設定 [$Bangou; テーブル: グループ番号]
end if

次のレコードへ移動(最後まできたら終了)
End loop

#2 2014-03-15 05:53:08

Hiro
Member

Re: Loopでレコードを対象外にしたい

【スクリプト】
・レコード/検索条件/ページへ移動 [最初の]
・Loop   
・ If [IsEmpty(FilterValues($vl; テーブル: グループ番号))]
・  変数を設定 [$vl; 値:List($vl; テーブル: グループ番号)]   
・  レコード/検索条件/ページへ移動 [次の; 最後まできたら終了]
・ Else   
・  レコードを対象外に
・  Exit Loop If [Get(対象レコード数)=ValueCount($vl)]
・ End If   
・End Loop

【ポイント】
*ユニーク番号だけの一覧「$vl」を生成しながら、FilterValuesでグループ番号とリスト照合する。
*「対象外」のあとは、自動で繰り上がるので、「次のレコードへ移動」する必要はない。

Last edited by Hiro (2014-03-15 06:43:42)

Offline

#3 2014-03-15 10:07:21

Traveller
Guest

Re: Loopでレコードを対象外にしたい

次のレコードへ移動(最後まできたら終了)
をend ifの上に移動して

if $Bangou = テーブル: グループ番号

if [$Bangou = テーブル: グループ番号 and $Bangou=GetNthRecord ( テーブル: グループ番号; Get ( レコード番号 )-1 )]
にするとか?

#4 2014-03-15 10:58:22

wader
Member

Re: Loopでレコードを対象外にしたい

ソートするので、1つ上と比較すればいいのでは。

グループ番号でソート
最初のレコードへ移動
次のレコードへ移動
Loop
  if[テーブル: グループ番号=GetNthRecord(テーブル: グループ番号;Get(レコード番号)-1)]
     レコードを対象外に
  else
    次のレコードへ移動(最後まできたら終了)
  end if
End loop

あれ?Travellerさんのと同じか。変数いらないでしょう。

Offline

#5 2014-03-15 11:12:32

bakabon
Guest

Re: Loopでレコードを対象外にしたい

Hiroさん、ありがとうございました。
朝一から移植して、感動しております。
waderさん、TravellerさんのGetNthRecord関数の使い方が
大変、勉強になりました。ありがとうございました。

#6 2014-03-15 12:03:16

Traveller
Guest

Re: Loopでレコードを対象外にしたい

>変数いらないでしょう。
そうとも言う(゚o゜)\

#7 2014-03-15 13:52:11

Shin
Member

Re: Loopでレコードを対象外にしたい

集計機能使えば、表示はすぐですし、エクスポートすればその一覧も作れますが。

Offline

#8 2014-03-16 11:56:37

ゼロン
Guest

Re: Loopでレコードを対象外にしたい

Hiro様のスクリプトで、試してみたのですが、
私の場合はうまくいきません。
自動採番のIDとテキスト型の番号のふたつのフィールドのファイルでテストしましたが、
同じ番号が出ていたりします。何が原因なのでしょうか?

レコード/検索条件/ページへ移動 [最初の]
・Loop   
・ If [IsEmpty(FilterValues($vl; テーブル: 番号))]
・  変数を設定 [$vl; 値:List($vl; テーブル: 番号)]   
・  レコード/検索条件/ページへ移動 [次の; 最後まできたら終了]
・ Else   
・  レコードを対象外に
・  Exit Loop If [Get(対象レコード数)=ValueCount($vl)]
・ End If   
・End Loop

#9 2014-03-16 12:35:59

Hiro
Member

Re: Loopでレコードを対象外にしたい

元々はFM12ですが、環境は何でしょう?
こちらの事前検証でも少なくともFM9では、$vlの計算結果に最初の値がダブってリストされるバグがあることを確認しています。
その場合、安易な対象療法かも?ですが、Exit Loop If [Get(対象レコード数)=ValueCount($vl)-1]で補正するとか。

今回質問の方法以外にも、全く別のアプローチによる解法も色々考えられます。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 560.13 KiB (Peak: 579.58 KiB) ]