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

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

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

You are not logged in.

Announcement

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


#1 2014-05-28 14:33:21

検索順
Guest

検索順のブラウズ表示

ファイルメーカーPro12。WINXp。

社員マスタがあります。
フィールドは社員コードと社員名などです。
社員コードを5件検索するために新規検索条件で行いましたが、
その検索結果の順番が社員マスタ登録順のようです。
検索順で表示させる方法を教えて下さい。

#2 2014-05-28 17:15:15

Traveller
Guest

Re: 検索順のブラウズ表示

こんな事したら出来そう。
リレーションを使っているので検索語(社員コード)は完全一致が条件ですが。

http://pupld.net/21/140528/948dp8o5dv/index.cgi
KensakuSort.fmp12

#3 2014-05-29 09:16:11

sorter
Guest

Re: 検索順のブラウズ表示

検索条件はグローバルフィールドに改行区切りで入れる
そのフィールドを社員コードとリレーションしておいて、検索の代りに「関連レコードへ移動」
Position(グローバルフィールド;社員コード;1;1)の計算フィールドを作っておいて、それでソートする

(社員コードは桁数が一定とします)

#4 2014-06-02 16:30:29

検索順
Guest

Re: 検索順のブラウズ表示

Traveller wrote:

こんな事したら出来そう。
リレーションを使っているので検索語(社員コード)は完全一致が条件ですが。

http://pupld.net/21/140528/948dp8o5dv/index.cgi
KensakuSort.fmp12

サンプル作成頂き有難う御座います。
サンプルでは上手く動作するのですが、実際のDBで設計するとだめです。
条件にレコードが沢山インポートします。
スクリプト内のレコードのインポートの
ソースレコード2 ⇒ 1
ソースレコード3 ⇒ 2
しか設定できません。
これが原因でしょうか。

#5 2014-06-02 18:11:20

Traveller
Guest

Re: 検索順のブラウズ表示

アップロードファイルだったのでインポートは変数にしましたが、そちらのファイルで
インポートする場合は変数はやめて、ファイル指定で自分自身を指定して手動インポート
してからインポート順を記憶(勝手に記憶します)させてみてください。

#6 2014-06-03 10:44:25

検索順
Guest

Re: 検索順のブラウズ表示

申し訳ありません。理解できずスクリプトを書きました。
どの様に修正すればよいのでしょうか。

フィールドへ移動[ ]
If[Count(Data::条件)>=1]
レイアウト切り替え[「Data」(Date)]
ウィンドウの固定
変数を設定[$p;値:Get(ファイルパス)]
レイアウト切り替え[「条件」(条件)]
全レコードを表示
対象レコード削除[ダイアログなし]
レコードのインポート[ソース:「$p」;ターゲット:「条件」;方法:追加;文字セット:「シフトJIS」;フィールドデータのインポート順:
ソースフィールド2のインポート条件::code
ソースフィールド3のインポート条件::番号]
[ダイアログなし]
関連レコードへ移動[テーブル:「Data」:使用するレイアウト:「Data」(Data)]
[関連レコードだけを表示:対象レコードの照合]
変数を設定[$r;値:1]
Loop
消去[Data::条件[$r]] 選択
変数を設定[$r:値:$r+1]
Exit Loop If[$r>5]
End Loop
レコードのソート[ソートされた順位でレコードを保持,特定のソート順:Data::code:値一覧に基づく:「新規値一覧」]
[記録する;ダイアログなし]
フィールドへ移動][ ]
End If

#7 2014-06-03 12:02:19

sorter
Guest

Re: 検索順のブラウズ表示

複雑すぎる...
Position(グローバルフィールド;社員コード;1;1)の計算フィールドを作っておいて、それでソート
なら、検索した後にこれぐらいでいいはず。
検索条件を変更
変数を設定[$条件;社員コード]
Loop
次のレコードへ移動[最後で終了]
変数を設定[$条件;$条件&¶&社員コード]
EndLoop
ブラウズモードへ切り替え[]
フィールド設定[グローバル;$条件]
レコードをソート[グローバル]

#8 2014-06-03 18:39:13

Traveller
Guest

Re: 検索順のブラウズ表示

複雑過ぎたかも知れませんけど一応・・・
ステップを継ぎ接ぎしたので変な並びになってました。

変数を設定[$p;値:Get(ファイルパス)]  を削除して

レコードのインポート[ソース:「$p」;・・・
ソースフィールド2のインポート条件::code
ソースフィールド3のインポート条件::番号]
[ダイアログなし]             
の部分は
データソースを指定で「ファイル」で「ファイルの追加」で自分自身を指定して
インポート順指定を押せばフィールドが出ますから指定して、次に出る窓で
「繰り返しは複数のレコードに分ける」にチェックを入れるといいはずです。
最初はダイアログありにして。

#9 2014-06-04 15:37:04

検索順
Guest

Re: 検索順のブラウズ表示

Traveller wrote:

複雑過ぎたかも知れませんけど一応・・・
ステップを継ぎ接ぎしたので変な並びになってました。

変数を設定[$p;値:Get(ファイルパス)]  を削除して

レコードのインポート[ソース:「$p」;・・・
ソースフィールド2のインポート条件::code
ソースフィールド3のインポート条件::番号]
[ダイアログなし]             
の部分は
データソースを指定で「ファイル」で「ファイルの追加」で自分自身を指定して
インポート順指定を押せばフィールドが出ますから指定して、次に出る窓で
「繰り返しは複数のレコードに分ける」にチェックを入れるといいはずです。
最初はダイアログありにして。


サンプルDBに対して修正しているのですが解らず質問です。

ファイルの追加で自分自身とは file:KensakuSort.fmp12 でしょうか?
インポート順指定を押せばフィールドが出ますから指定とは?
インポート元名と先名と各フィールド名を教えて下さい。

#10 2014-06-04 18:05:01

Traveller
Guest

Re: 検索順のブラウズ表示

データソースを指定で「ファイル」を押せば「ファイル指定」の窓が出ますよね。
ここで「ファイルの追加...」を押してKensakuSort.fmp12を指定します。
インポート順設定窓が出たら、インポート元をDataにして、インポート先は条件
インポートするフィールドは
条件 → code
条件順 → 番号
で、新規レコードとして追加を選びます。OKを押すと繰り返しフィールドの
インポートなので処理指定窓が出ますから、「複数のレコードに分ける」を
オンにします。

#11 2014-06-04 19:09:35

Traveller
Guest

Re: 検索順のブラウズ表示

こんな感じになります。

フィールドへ移動 [ ] ——確定のため
レイアウト切り替え [ 「Data」] ----念のため
If [ Count ( Data::条件 ) ≥ 1 ]
   レイアウト切り替え [「条件」]
   全レコードを表示
   対象レコード削除[ ダイアログなし ]
   レコードのインポート [ ソース: 「file:KensakuSort.fmp12」]——ファイル指定で手動指定
   関連レコードへ移動 [ 「Data」; 使用するレイアウト:「Data」関連レコードだけを表示]---検索の代わり
   変数を設定 [ $r; 値: 1 ]
   Loop
     消去 [ Data::条件[$r] ] [ 選択 ]
     変数を設定 [ $r; 値:$r+1 ]
     Exit Loop If [ $r > 5 ]
   End Loop
   レコードのソート [ 値一覧に基づく: 「新 規値一覧」 ]----予め値一覧を作っておいてね
   フィールドへ移動 [ ]——フィールドから抜けるため
End If

変数を設定からEnd Loopまでは、繰り返しに入力した条件がいつまでも
残ってしまうので一行ずつ消しているだけです。

#12 2014-06-09 10:01:01

検索順
Guest

Re: 検索順のブラウズ表示

Traveller wrote:

こんな感じになります。

フィールドへ移動 [ ] ——確定のため
レイアウト切り替え [ 「Data」] ----念のため
If [ Count ( Data::条件 ) ≥ 1 ]
   レイアウト切り替え [「条件」]
   全レコードを表示
   対象レコード削除[ ダイアログなし ]
   レコードのインポート [ ソース: 「file:KensakuSort.fmp12」]——ファイル指定で手動指定
   関連レコードへ移動 [ 「Data」; 使用するレイアウト:「Data」関連レコードだけを表示]---検索の代わり
   変数を設定 [ $r; 値: 1 ]
   Loop
     消去 [ Data::条件[$r] ] [ 選択 ]
     変数を設定 [ $r; 値:$r+1 ]
     Exit Loop If [ $r > 5 ]
   End Loop
   レコードのソート [ 値一覧に基づく: 「新 規値一覧」 ]----予め値一覧を作っておいてね
   フィールドへ移動 [ ]——フィールドから抜けるため
End If

変数を設定からEnd Loopまでは、繰り返しに入力した条件がいつまでも
残ってしまうので一行ずつ消しているだけです。


サンプルをFMサーバ12に登録し、検索しましたが、上手くいきました。
ところが現システムを改修し、スクリプト動作させると次の不具合が出ます。
インポート表示が出てインポート元、残りのレコード数17万件やコーヒカップが出て時間が掛かっています。
中止を押すとインポートの概要表示がでるので、OKボタンを押します。
結果検索できていますが、どこが間違っているのでしょうか。

#13 2014-06-09 10:44:21

sorter
Guest

Re: 検索順のブラウズ表示

間違ってるというより、共有ファイルでの動作は想定外なのでは。
私のはグローバルフィールドなので、共有してても関係なく動作します。

#14 2014-06-09 11:57:15

Traveller
Guest

Re: 検索順のブラウズ表示

If [ Count ( Data::条件 ) ≥ 1 ]
の前に
全レコードを表示
レコードを対象外に
対象外のみを表示
を入れるといいのではないかな?

#15 2014-06-09 16:19:31

検索順
Guest

Re: 検索順のブラウズ表示

Traveller wrote:

If [ Count ( Data::条件 ) ≥ 1 ]
の前に
全レコードを表示
レコードを対象外に
対象外のみを表示
を入れるといいのではないかな?

修正すると解決しました。
複数の入力者に試してもらってます。

#16 2014-06-09 16:24:05

検索順
Guest

Re: 検索順のブラウズ表示

sorter wrote:

複雑すぎる...
Position(グローバルフィールド;社員コード;1;1)の計算フィールドを作っておいて、それでソート
なら、検索した後にこれぐらいでいいはず。
検索条件を変更
変数を設定[$条件;社員コード]
Loop
次のレコードへ移動[最後で終了]
変数を設定[$条件;$条件&¶&社員コード]
EndLoop
ブラウズモードへ切り替え[]
フィールド設定[グローバル;$条件]
レコードをソート[グローバル]


こちらの方法も試したいのですが。
Aグローバルフィールドを作成しました。
B計算フィールド =Position(グローバルフィールド;社員コード;1;1)を作成しました。
初心者なので具体的なスクリプトの設計方法が解らなくて困っています。
宜しくお願いします。

#17 2014-06-09 17:37:49

Traveller
Guest

Re: 検索順のブラウズ表示

こういうことかな・・・
簡単過ぎたので間違ってるかも。
http://pupld.net/21/140609/jkiwi3g4nz/index.cgi
KensakuSort2.fmp12

#18 2014-06-10 11:09:22

検索順
Guest

Re: 検索順のブラウズ表示

Traveller wrote:

こういうことかな・・・
簡単過ぎたので間違ってるかも。
http://pupld.net/21/140609/jkiwi3g4nz/index.cgi
KensakuSort2.fmp12

サンプルまで作成いただき大変有難うございます。
早速レコードが沢山あるDBで試しましたが、検索時間に20秒程度かかっています。
一日何十回も利用するので、残念ですが実務に耐えません。
早く出来ないでしょうか。

#19 2014-06-10 11:53:44

sorter
Guest

Re: 検索順のブラウズ表示

検索方法は全く変わらないので、検索に時間がかかるのは作り方がどこか間違ってます。
(「社員コードを5件検索するために新規検索条件で行う」)
ここで提示してるのは、検索が終わった後にソートする方法です。(どういう検索でも、検索終了時には未ソート状態になる)
私の書いた方法は非保存フィールドでソートするので、検索結果が膨大なら時間はかかりますけど、「5件」とかなら20秒もかかりません。
社員マスタの検索ですよね?「残りのレコード数17万件」とかいう記述もありましたけど、社員が17万人もいるんでしょうか?

#20 2014-06-10 12:51:12

Shin
Member

Re: 検索順のブラウズ表示

抽出した結果を、どう使いますか。

印刷などに使うのみなら、社員番号のみをもたせたテーブルで、社員番号でリレーションしておき、抽出ソートしたい順で社員番号を入れていけば、それだけで済みませんか。社員番号以外は、関連フィールドとして表示させます。
検索の手間もありませんし、ソートも不要です。

それ以上に使うのでしたら、そのテーブルから関連レコードへ移動、などで、元のテーブルに戻れば良いでしょう。

Offline

#21 2014-06-10 13:11:53

Traveller
Guest

Re: 検索順のブラウズ表示

郵便番号簿で5件探してみたけど数秒でした。
私のサンプルの中の検索実行をやめて、条件とcodeを自己リレーションして
関連レコード移動に変更して、その後ソートしたら12万件内の8件でも一瞬でした。

#22 2014-06-10 14:35:14

検索順
Guest

Re: 検索順のブラウズ表示

フィールド定義やスクリプトを確認しましたがサンプル通りでした。
スクリプトを実行すると

検索実行中。
クエリーを処理中。

と表示がでます。
これが20秒も掛かる理由でしょうか。
手動検索を数件同時にしても一瞬で完了し、「クエリーを処理中」の表示もでません。

目的は、二つあります。
1.検索結果5レコードまでをPC又はiPadに表示させ参照
2.参照後、一レコード毎にレイアウトを切り替えて入力
3.入力後、1.の画面に戻り、繰り返し入力をします

レコード数17万件は番号毎(ユニークな値)に作成してます。社員コードではありません。
ワープロミスに気が付きましたが、そのまま問い合わせをしていました。
申し訳ありません。

#23 2014-06-10 16:47:59

tim
Guest

Re: 検索順のブラウズ表示

既に答えが出てますけど、検索してソートするんでなく、リレーションで表示すれば問題ないのでは。
検索条件を入れるテーブルを別にしておけば、大量のレコードをiPadにダウンロードする必要が無くなるでしょうし。
1.検索条件5レコードまでをPC又はiPadで入力して関連レコードを表示させ
2.参照後、関連レコードへ移動でデータのテーブルのレイアウトに切り替えて入力

#24 2014-06-11 08:51:12

Traveller
Guest

Re: 検索順のブラウズ表示

>これが20秒も掛かる理由でしょうか。
レコード数が多いのでpositionのフィールドが非保存のためそうなります。
リレーションと関連レコード移動を試してください。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 622.2 KiB (Peak: 655.1 KiB) ]