これはあなたが進んでいる方向とは異なる方向ですが、作成しようとしているものを達成することができます。
データベースの正規化を維持するには、同じ情報を2つの場所に格納してリソースを浪費するため、通常は複数のテーブルにフィールドを格納する必要はありません。あるテーブルのデータを別のテーブルにリンクしようとすると、(テーブルを使用する代わりに)サブフォームのデータソースとして使用される簡単なクエリを使用して達成できます。
次のコードを新しいクエリのSQLビューにコピーし、フォームコントロール参照[MyInvoiceFormName]![MyInvoiceTextboxName]
を上書きして、フォームと請求書IDテキストボックスの名前と一致させます。それを実行することによってあなたが望むデータを引っ張っていることを確認してください(あなたのフォームはフォームビューでなければなりません。また、正しく動作するためにはフォームのテキストボックスに請求書IDを表示する必要があります)。データが正しいと思われる場合は、名前を付けて保存します。
SELECT [Invoice-Photo].[PhotoID], [Invoice-Photo].[Quantity], [Photo].[SalePrice] AS Cost
FROM [Invoice-Photo] INNER JOIN [Photo] ON [Invoice-Photo].[PhotoID] = [Photo].[ID]
WHERE [Invoice-Photo].[Invoice ID] = [Forms]![MyInvoiceFormName]![MyInvoiceTextboxName]
GROUP BY [Invoice-Photo].[PhotoID]
ORDER BY [Invoice-Photo].[PhotoID];
は、その後、フォームのデザインビューで、あなたのサブフォームを表示したいエリアにナビゲーションペインから新しいクエリをドラッグして、それが自動的に保存されたクエリのうち、サブフォームを作成する必要があります。
これで、メインフォームに表示されている請求書IDの関連レコードが表示されます。ただし、新しい顧客または新しい請求書IDを選択すると更新されないことがあります。これを可能にするには、.requery
コマンドをサブフォームのリフレッシュをトリガーするコントロールのAfterUpdate
イベントに追加するだけです。あなたはVBAに慣れている場合、あなたはあなたのAfterUpdate
イベントのコードビルダにこのコードを貼り付けることができます。
[Forms]![MyInvoiceFormName]![MyNewSubformName].Requery
今、サブフォームは、各選択変更後に更新する必要があります。
SELECT [写真]。[ID]、[写真]。[SalePrice] FROM Photo; 現在、すべての写真から利用可能なSalesPricesがすべて表示されたドロップダウンメニューが表示されますが、その行の写真IDに対応する価格のみが表示されます – user3545910
[コスト]フィールドは参照フィールドです。クイックテストとして、テーブルをExcelにエクスポートします。次に、ワークシートを開くときに、「費用」列の値はあなたの期待通りですか?それらは実際には[SalePrice]値の代わりに '[ID]'値ですか? – HansUp