2016-04-28 2 views
0

私は請求書テーブルを作成しようとしています。最終的にPhotoという別のテーブルからデータを自動的に取得するフォームです。写真テーブルには "salesprice"というフィールドがあり、請求テーブルには "コスト"というフィールドがあります。テーブルは、既にコンボボックスのフィールドにリンクされているPhotoIDの主キーによって結合されています。Microsoft Access別のテーブルからフィールドをリンクする

目的は、適切なPhotoIDを選択し、販売価格を[費用]フィールドに自動入力します。現在、「コスト」の行は、行ソース・ビーイングとのコンボボックスである:

SELECT [Photo].[ID], [Photo].[SalePrice] FROM Photo; 

フィールドは、現在利用可能なすべてのコストで、ドロップダウンリストがありますが、私はそれが唯一の行のフォトIDに関連付けられたコストを持つようにしたいです。

This is what the Invoice's table currently looks like

The ultimate goal is to make the form below update the cost field when you change the photoid

私は少し新しくアクセスしましたが、いくつか試してみると機能しません。私はこれをサブフォームに実装していたので、誰かがより良いアプローチをしていない限り、テーブルレベルでそれを行うのが最善だろうと思いました。アリヘルプはすばらしいおかげです!

+0

SELECT [写真]。[ID]、[写真]。[SalePrice] FROM Photo; 現在、すべての写真から利用可能なSalesPricesがすべて表示されたドロップダウンメニューが表示されますが、その行の写真IDに対応する価格のみが表示されます – user3545910

+0

[コスト]フィールドは参照フィールドです。クイックテストとして、テーブルをExcelにエクスポートします。次に、ワークシートを開くときに、「費用」列の値はあなたの期待通りですか?それらは実際には[SalePrice]値の代わりに '[ID]'値ですか? – HansUp

答えて

0

これはあなたが進んでいる方向とは異なる方向ですが、作成しようとしているものを達成することができます。

データベースの正規化を維持するには、同じ情報を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 

今、サブフォームは、各選択変更後に更新する必要があります。

関連する問題