みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
大変初歩的な事で恐縮です。初心者です。
Win10 fairu me-ka-18でサーバーでファイルをダイレクトウェブで共有しています。
ポータルで絞り込みされたデータを違うデータベスに書き出したいのですが
ダイレクトウェブ上ではインポートの際ファイル指定をしなければ
ならないのでポータル行をコピーしてループさせ別のデータベースに新規レコードとして
ペーストして書き出したいのですがうまくいきません。
例えば患者IDがポータルで数百レコードあるとすると、
そのポータルにあるIDを別のデータベースに数百レコードとして書き出したい。
(ダイレクトウェブ上での実行が前提です。)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
選択範囲を設定[患者選択::患者ID]
ポータル行へ移動[選択:オン;最初の]
変数を設定[$list;値;GetNthRecord(患者選択::患者ID);+1]
Loop
新規レコード/検索条件
選択範囲を設定[data::患者ID]
フィールド設定[data::患者ID;$list]
ポータル内の行へ移動[選択:オン;次の;最後まで来たら終了:オン]
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
これだと最初のポータル行のIDが無限ループでコピーされてしまう感じ
になってしまいます(泣)
過去の説明ではサンプル等もあるような感じですが期限切れとなっており
ダウンロードできません。どなたかお助けいただけると嬉しいです。
拙い説明で申し訳ありません。よろしくお願いします。
サーバーサイドスクリプトで処理するのが簡単だと思いますが、WebDirectで処理しないとダメですか。
インポートする内容は、IDだけですか。それともレコードそのものですか。
IDのみでしたら、そのポータルのIDをList() 関数で取り込み、別のファイルのスクリプトに引数として渡します。そちらのスクリプトで、1行ずつ読み取り、新規レコードとして設定していけばいいでしょう。
後者なら、ID でリレーションを張っておき、ID 以外はルックアップすればいいです。
ちなみに、過去のスレッドはどれですか。
Offline
Shin様ありがとうございます。
定期的にではなく都度ウェブダイレクト上で実行させたいので
なんとかならないものかと思案しております。
過去のスレッドもGetNthRecord()みたいなものを使えば
できないことはないが、「エクスポート・インポートが楽」というような
記述で完全な解説はなく、モヤモヤ感の残るものだったと記憶しています。
(スレッドのリンク貼れなくてすみません)
あとList()で囲ってやる方法ですが、囲って書き出すところまでは
なんとかできたのですが、それを1行づつ拾ってレコードに
していくまでのやり方が思い浮かばなくて悩んでおりました。
(loopでやるのかな?みたいな。。)
ご教授いただければ幸いです。
よろしくお願いします。
定期的でなく「サーバ上のスクリプト実行」ステップで呼び出せますよ。
> ウェブダイレクト上で実行
とは、全ての処理を WebDirect で行いたいではなく、接続しているクライアントから実行したい、という意味ですよね。
himadanee さんのコメントの通りです。
List() で .... という話は、例えば、
元になるファイルのスクリプトで、
変数を設定[$lst ; List ( リレーション::ID )]
スクリプト実行[別のファイルのスクリプト ; 引数:$lst]
を作り、別のファイルに、呼び出されるスクリプトを作ります
変数を設定[$lst ; Get ( スクリプト引数 )]
変数を設定[$i ; ValueCount ( $lst )]
Loop
新規レコード
フィールド設定[ ID ; GetValue ( $lst ; $i )]
Exit Loop If ( Let ( $i = $i - 1 ; not $i )
end Loop
としておきます。
WebDirect は処理が少し遅くなりますので、大量のIDになると、結構時間がかかることが予想されます。
ただ、同じIDを持ったレコードをわざわざ別のファイルに作る、もしレコード内容までコピーするのでしたら尚更、という運用は、データベースの構造としては望ましいものではありません、実際の運用は何なのですか。
Last edited by Shin (2023-08-08 08:52:30)
Offline
一応考慮事項として、GetNthRecord()もList()もポータルは関係なくリレーションで取得しますので、ポータルにフィルタがあると反映されません。
なので#1のスクリプトで
ポータル行へ移動
とか
ポータル内の行へ移動[選択:オン;次の;
してますが、無意味です。
ポータル内に移動してその行から取得したければ、GetNthRecord()でなく単に
ポータルテーブル::フィールド
か
Get(アクティブフィールド内容)
とかを使うことになるでしょう。
あんまりお勧めできません。
himadanee様 Shin様
詳しい解説をありがとうございます。
最終的には条件の違うポータルからの、いくつかの集計が1点と
ポータルのリストを書き出しての2次利用データベースといいますか。。
の2点をやりたいと思っております。
理解がまだ追いつかない部分もありますが
教えていただいた事をもとにトライして
ご報告させていただければと思います。
感謝いたします。m( . . )m
ポータルにフィルターを使っているのでしたら、ポータルの中から、関連レコードへ移動 してその状態でサーバー上のスクリプトを呼び出し、その中で別ファイルからレコードをインポート してもよかったかもしれません、(何か制限があった様な気もしますが)
Offline
「サーバー上のスクリプトを呼び」の場合は、そっちでレイアウト切り替え(処理対象テーブルの選択)から始めないと、呼び出したクライアント側の対象レコードの状態は反映されなかったと思います。
レコードのインポートも、共有ファイルからはできなかったような記憶が。一旦エクスポートしてやってました。FM20は全然新機能などチェックできてませんが...質問者は18ですね...
ODBCからのインポートはできたはず(同一テーブルでも)
サーバー側のクライアントへレコードは引きつがないのでした。すみません。
Offline
Pages: 1
[ Generated in 0.007 seconds, 10 queries executed - Memory usage: 574.66 KiB (Peak: 591.2 KiB) ]