このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

ファイルメーカーのリレーションで、教えてください。

発言者:白岩
( Date Sunday, May 03, 1998 02:51:33 )


いつもお世話になっています。
おかげさまで、やっと目的のデータベースが完成できそうです。

ところでその中で、最後にどうしても加えたい機能が出てきました。

AとBのリレーションで結んだ2つのデータベースがあります。
それぞれ[Name]というフィールドがあり、スクリプトで、
Aの[Name]に、Bの[Name]が一致したレコードのみ、Bの[Data1]、
[Data2]、[Data3]を、Aの同じ[Data1]、[Data2]、[Data3]に
加算して取り込む形にしています。

しかしここで、一致しない[Name]が存在する場合、Aに自動的に
新規レコードを追加し、そこにBの[Name]、[Data1]、[Data2]、
[Data3]を加えたいのですが、そのスクリプトがどうしても組めません。
「一致しない[Name]」は、複数ある場合もあります。
現在は、目で探し、手作業で追加していましたが、見落とす可能性も
あるので、この作業もスクリプトで出来ればと考えています。


初歩的な質問で恐れ入りますが、
どなたか、ご教授くださいますようよろしくお願いいたします。

山田 さんからのコメント
( Thursday, May 07, 1998 18:37:09 )

これでどうでしょう
全てファイルB側で作ります。

まず、ファイルBに”Bの[Name]に、Aの[Name]が一致した場合”のリレーション
(ここでは”一致”)を作ります。関連するレコードの作成を許可
次に、ファイルBに最後のページであることをチェックするためのフィールド
(ここでは”チェック”)をテキストで、
またファイル Aと比較するフィールド(ここでは”比較”)を計算で
” Name= 一致:: Name”を作ります。
スクリプトを作る前に検索をしておきます。
検索条件  比較=0

スクリプトは

エラー処理「オン」
検索実行 記憶する
If「Status(対象レコード数)=0」
 現在のスクリプト終了
Else
 レコード/検索条件/ページへ移動 「最後の」
 フィールド設定 「チェック」, 「1」
 レコード/検索条件/ページへ移動 「最初の」
   Loop
  フィールド設定 「一致:: Name」, [Name」
  レコード/検索条件/ページへ移動 「次の」
  Exit Loop If計算 「チェック ==1」
 End Loop
 フィールド設定 「一致:: Name」, [Name」
End If
全てのレコードを対象に

山田 さんからのコメント
( Thursday, May 07, 1998 18:41:49 )

すみません。
「チェック ==1」は「チェック =1」の間違いです。

白岩 さんからのコメント
( Friday, May 08, 1998 01:43:37 )

山田さん、コメントどうもありがとうございます!

教えていただいたとおりに実行したところ、
見事に上手くいきました。

いや〜、Bの方で作るとは、全く思い付きませんでした。
(スクリプト自体も思い付きませんでしたが…)

本当にどうもありがとうございました。
おかげさまで助かりました。

ps
みなさん、こういったスクリプトはどこで
勉強されるのでしょう?