みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ファイルメーカーで医薬品集を作成しています。
--------------------------------------------------------------
薬品名 効能 用量
--------------------------------------------------------------
アリナミン 滋養強壮 3錠
--------------------------------------------------------------
セデス 頭痛 1錠
歯痛
--------------------------------------------------------------
品目により、データの行数が異なるため、薬品名、効能、用量を上へスライドさせ、空行がでないよう行をつめています。
これの目次(薬品名が何ページにあるか)を作成したいのですが、何かいい方法はありませんか?
[Layouter]さんの方法だと、スライドがない場合はできるのですが、スライドがある場合は同じ薬品名が何度も出てきます。
素人考えですが、目次=薬品名&Get(ページ番号)というフィールドを作成し、レイアウトの薬品名の上に目次を重ねて表示させることで薬品名とページ番号を出すことはできるのですが、このデータをコピーすることができません。
[Layouter]さんの方式
Let($目次=List($目次;品目名 & Char(9) & Get(ページ番号));品目名)
という非保存計算フィールドを作って、ボディの品目名の代わりに配置。
スクリプト
プレビューモードに切り替え[]
Loop
スクリプト一時停止[0.1秒]
ページへ移動[次の;最後で終了]
EndLoop
フィールド設定[目次;$目次]
これで全部1つのフィールドに入ります。タブ位置とタブ文字を設定すればそのまま使えます。
Offline
複数回でてくるのは最後のが正しいようなので
項目 テキスト ユニークに制限
ページ 数字
というテーブルを作って、上記の結果を
フィールド内容のエクスポート
レコードのインポート
項目を照合してインポート
で、どうかな。
同様の処理を計算式に組み込むのも可能だろうけど、1つのフィールドだと目次自体が1ページに収まらない場合に使いづらいので、テーブルに入れるのもいいでしょう。
Offline
別のテーブルでなく、数字フィールド「ページ」に入れる方法。
Case ( Get ( ウインドウモード ) = 2 ;//ブラウズモードで計算しない保険
Evaluate( "Let($目次" & Get ( レコード ID ) & "=" & Get(ページ番号) & ";薬品名)" )
)
という非保存計算フィールドを作って、ボディの薬品名の代わりに配置。
スクリプト
プレビューモードに切り替え[]
Loop
ページへ移動[次の;最後で終了]
EndLoop
ブラウズモードに切り替え[]
フィールド内容の全置換 [ダイアログなし; ページ; Evaluate ( "$目次" & Get ( レコード ID ) )]
208ページの場合に、一時停止0.1秒だと40秒かかりましたが、0.01秒にすると25秒。一時停止なしでもちゃんと同じ結果で1.7秒しかかかりませんでした。
一時停止は必要だった気がするけど、これもバージョンアップの関係かな?
Offline
「wader」のご回答は、非保存計算フィールド(仮にA)を作成し、そのフィールドの計算式にCaseからEvaluateまでを入れるということでしょうか。
Offline
計算式は閉じかっこまで3行です。
フィールドは作らず薬品名の条件付き書式に
Evaluate( "Let($目次" & Get ( レコード ID ) & "=" & Get(ページ番号) & ";0)" )
でもよさそうな。
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 511.66 KiB (Peak: 518.95 KiB) ]