これを正しく読んでいると、フォームの主要部分としてメインの親テーブルがあり、ナビゲートするときに子レコードをサブフォームに表示する必要があるということです。Accessはデフォルトでこのように機能し、コードを記述する必要はまったくありません。
さらに、子レコードをサブフォームに追加すると、外部キー値が正しく設定されます。ここでも、コードは必要ありません。
したがって、メインの親テーブルに基づいて標準フォームを作成します。次に、子テーブルに基づいて連続フォームを作成し、それを上記のメインフォームにドロップできます。
次に、メインフォームをデザインモードで開き、サブフォームのプロパティシートを設定します。そのプロパティシートで、リンクマスターフィールドとリンク子フィールドを設定するだけです。リンクマスターはメインフォームの主キーに設定され、リンクの子はサブフォームのテーブルの外部キーフィールドに設定されます。
上記が完了すると、コーディングやすべてがなくてもすべてが機能するはずです。
エラーメッセージを追加する子について:
メインの顧客フォームがあるとすると、ユーザーは新しい顧客レコードに移動するまで注文を追加できません。新しい顧客レコードに移動しない場合は、このメインフォームで既存の顧客を編集します。したがって、すべての場合において、顧客の注文を入力する前に、メインの顧客レコードが常に追加されます。
ユーザーが空白の顧客レコードに移動してから、カーソル(フォーカス)を注文のあるサブフォームにジャンプして入力を開始できると思います。このシナリオでも、フォーカスがメインの顧客フォームから注文サブフォームに移動すると、空白の顧客レコードが追加されます。(したがって、従来のメインフォームとサブフォームのセットアップを使用している場合、アクセスUIは親レコードの追加を処理します)
したがって、ユーザーインターフェイスの観点からは、メインの顧客レコードがすでに存在しない場合、ユーザーが注文を入力することは実際には不可能です。このため、親顧客レコードが存在しないというエラーメッセージは表示されません。この種のエラーが発生するのは、その人が注文フォームを非サブフォームとして開いてから、新しい注文レコードを追加しようとした場合のみです。この場合、エラーメッセージが表示されます。したがって、このエラーメッセージをトラップする必要はありません。ユーザーがサブフォームをスタンドアロンとして開くことは許可しません。なんらかの奇妙な理由で、サブフォームをメインフォームとは別に開くことを許可する場合は、allows additons = falseを指定してフォームを開きます(これもエラーメッセージの必要性を防ぎます)。
何らかの理由で、ユーザーがサブフォームまたは注文フォームを個別に開くことが許可されており、追加の許可をオフにしていない場合、ユーザーは新しい空白のレコードに移動できると思います。つまり、FKは顧客レコードは正しく設定されません。この注文フォームに顧客を選択するための規定がある場合は、この注文フォームの更新前のイベントに次のコードを入れることができます。
If isnull( foreign key field name goes here) = true then
Msgbox “ you must select a customer before you can enter an order”
Cancel = true
End if
もう一度、ある意味では、親レコードが存在せずに子レコードが追加されようとしているというエラーメッセージを実際にトラップしていませんでした。UIインターフェイスを使用して、エラーメッセージが最初から発生しないようにするアクションを実行するようにユーザーに指示しているだけです。