2009-07-09 6 views
0

私は、SQL Serverテーブルを備えた小さなAccess 2007 UIを設計しています。いくつかのアクセス2007年のフォームに関するプログラミングに関する質問

私のページにはデータシートであるサブフォームがあります。フォームビューで選択されたすべての親レコード(たとえばテーブルA、テーブルBにはテーブルAの外部キーがある)については、データシート内のすべての関連レコードを書きたいと思います。

5人のお客様がいます。それぞれには複数の注文があります。フォーム内の顧客を閲覧することができます。しかし、次のボタンをクリックするたびに、関連するすべての注文をデータシートに表示する必要があります(データシートで新しいレコードを書き込むこともできます)。

また、データシート(注文であることを想像してください)では、現在表示されている顧客レコードと同じIDになるようにPK ID値を設定できますか?

おかげ

答えて

0

私はこれを正しく読んでいる場合、あなたは、フォームの主要部分として、メインの親テーブルを持って言っている、とあなたはあなたの周りにナビゲートする子レコードがサブフォームに表示したいです。アクセスはデフォルトでこのように動作し、コードを書く必要はありません。

さらに、子フォームをサブフォームに追加すると、外部キー値が正しく設定されます。再度コードは必要ありません。

したがって、メインの親テーブルに基づいて標準フォームを作成します。次に、子フォームのテーブルに基づいて連続フォームを作成し、それを上記のメインフォームにドロップすることができます。

あなたは、desingモードでメインフォームを開いて、サブフォームのプロパティシートを設定します。そのプロパティシートでは、リンクのマスターとリンクの子フィールドを設定するだけです。リンクマスターはメインフォームのプライマリキーに設定され、リンクの子はサブフォームのテーブルの外部キーフィールドに設定されます。

上記の操作が完了したら、すべての処理がすべてのコードなしで実行されるはずです。子の追加のエラーメッセージについては


:彼らは新しい顧客レコードに移動するまで

あなたがメインの顧客のフォームを持っていると仮定すると、ユーザーは順番を追加することはできません。新しい顧客レコードに移動しない場合、このメインフォームの既存の顧客を編集します。したがって、すべてのケースで主要な顧客レコードは、顧客注文を入力する前に常に追加されます。

ユーザーが空白の顧客レコードに移動し、その注文があるサブフォームにカーソル(フォーカス)をジャンプして入力を開始できるとします。このシナリオでも、フォーカスが主コスプレマーフォームからオーダーサブフォームに移動すると、空白の顧客レコードが追加されます。 (したがって、アクセスUIは、クラシックメインフォームとサブフォームの設定を使用しているときに親レコードの追加を処理します)

したがって、ユーザインタフェースの観点から見ると、既に存在する主要な顧客レコードなしで注文を入力することができます。このため、存在しない親顧客レコードに関するエラーメッセージは表示されません。人が注文フォームを非サブフォームとして開き、新しい注文レコードを追加しようとすると、この種のエラーが発生するだけです。この場合、エラーメッセージが表示されます。したがって、私は本当にこのエラーメッセージをトラップする必要はありません。私は、ユーザーが単独でサブフォームを開くことを許可しません。いくつかの奇妙な理由で、サブフォームをメインフォームとは別に開くことができる場合は、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インターフェイスを使用して、エラーメッセージが最初に発生することを防ぐアクションをユーザーに伝えるだけです。

+0

ありがとうございます!私は前にこの作業をしましたが、いくつかの練習が必要です。顧客の行が1つもない場合、レコードを追加する(この場合は注文)というユーザーを防ぐ方法はありますか? Accessはエラーをスローします(詳細を覚えていないことがあります)。自分のエラーメッセージ/ボックスでAccessのエラーを上書きできませんか? – dotnetdev

+0

テーブルBの外部キーが必要な場合、データベースエンジンはエラーを発生させる必要があります。フォーム上には、Form_Errorイベントがあり、すべてのデータエラーに対して起動する必要があります。 – Mark3308

関連する問題