2016-04-28 12 views
0

Ich versuche, eine Rechnungstabelle zu erstellen, und schließlich ein Formular, das automatisch Daten aus einer anderen Tabelle namens Foto erhält. Die Fototabelle hat ein Feld namens "Verkaufspreis" und die Rechnungstabelle hat das Feld "Kosten". Die Tabellen werden durch einen Primärschlüssel von PhotoID verbunden, der bereits in einem Combobox-Feld verknüpft ist.Microsoft Access Verknüpfen von Feldern aus einer anderen Tabelle

Das Ziel besteht darin, die entsprechende PhotoID auszuwählen, und dann wird der Verkaufspreis automatisch in das Feld Kosten eingetragen. Derzeit ist die „Kosten“ Reihe ist eine Combobox mit Zeilenquelle infrage kommen:

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

Das Feld hat jetzt eine Dropdown-Liste mit allen verfügbar Kosten, aber ich will es nur die Kosten, die mit der Zeile der Foto-ID zugeordnet haben .

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

Ich bin ein bisschen neu zu erreichen, aber habe ein paar Dinge ausprobiert und kann es nicht zum Laufen bringen. Da ich dies in ein Unterformular implementierte, dachte ich, es wäre das Beste, es auf Tabellenebene zu tun, es sei denn, jemand hat einen besseren Ansatz. Ant Hilfe wäre großartig, danke!

+0

WÄHLEN [Foto]. [ID], [Foto]. [Verkaufspreis] VON Foto; Momentan erscheint ein Dropdown-Menü mit allen verfügbaren Verkaufspreisen von allen Fotos, aber ich möchte, dass der Preis nur derjenige ist, der der Foto-ID der Zeile entspricht. – user3545910

+0

Scheint Ihr 'Kosten'-Feld ist ein Nachschlagefeld. Als schnellen Test exportieren Sie die Tabelle nach Excel. Wenn Sie dann das Arbeitsblatt öffnen, sind die Werte in der Spalte "Kosten" das, was Sie erwarten? Sind sie tatsächlich '[ID]' Werte anstelle von '[SalePrice]' Werten? – HansUp

Antwort

0

Dies ist eine andere Richtung als Sie vorgeben, aber könnte erreichen, was Sie versuchen zu bauen.

Um die Datenbanknormalisierung beizubehalten, möchten Sie ein Feld in der Regel nicht in mehreren Tabellen speichern, da Ressourcen dadurch verschwendet werden, dass dieselben Informationen an zwei Stellen gespeichert werden. Der Versuch, Daten in einer Tabelle mit einer anderen zu verknüpfen, kann mit einer einfachen Abfrage erreicht werden, die als Datenquelle Ihres Unterformulars verwendet wird (anstatt eine Tabelle zu verwenden).

Kopieren Sie den folgenden Code in die SQL-Ansicht einer neuen Abfrage und überschreiben Sie die Formularsteuerungsreferenz [MyInvoiceFormName]![MyInvoiceTextboxName], damit sie mit dem Namen des Formulars und der Rechnungs-ID-Textbox übereinstimmt. Stellen Sie sicher, dass die gewünschten Daten abgerufen werden, indem Sie sie ausführen (Ihr Formular muss in der Formularansicht angezeigt werden, und eine Rechnungs-ID muss im Formular-Textfeld angezeigt werden, damit sie ordnungsgemäß ausgeführt werden kann). Wenn die Daten korrekt aussehen, benennen/speichern Sie sie.

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]; 

dann in der Entwurfsansicht des Formulars, die neue Abfrage aus dem Navigationsbereich in den Bereich ziehen Sie Ihr Unterformular angezeigt werden sollen sollte, wird es automatisch ein Unterformular aus Ihrer gespeicherten Abfrage erstellen.

Jetzt sollte es Ihnen die verwandten Datensätze für die Rechnungsnummer angezeigt im Hauptformular angezeigt werden. Es wird jedoch möglicherweise nicht aktualisiert, wenn Sie einen neuen Kunden oder eine neue Rechnungs-ID auswählen. Um dies zuzulassen, müssen Sie lediglich einen .requery-Befehl zum AfterUpdate-Ereignis des Steuerelements hinzufügen, das die Aktualisierung des Teilformulars auslösen soll. Wenn Sie mit VBA vertraut sind, können Sie diesen Code in den Code Builder einfügen für Ihre AfterUpdate Veranstaltung:

[Forms]![MyInvoiceFormName]![MyNewSubformName].Requery 

nun das Unterformular nach jeder Änderung der Auswahl aktualisieren soll.

Verwandte Themen