2016-04-28 4 views
0

Я пытаюсь создать таблицу счетов и, в конечном счете, форму, которая автоматически получает данные из другой таблицы под названием «Фото». В таблице «Фото» есть поле «salesprice», а в таблице счетов есть поле «Стоимость». Таблицы соединяются первичным ключом PhotoID, который уже связан в поле combobox.Microsoft Access Связывание полей из другой таблицы

Цель состоит в том, чтобы выбрать соответствующий идентификатор фотоидентификации, а затем автоматическое заполнение продаж в поле «Стоимость». В настоящее время ряд «Стоимость» является выпадающим с источником строки бытием:

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

ВЫБЕРИТЕ [Фото]. [ID], [Фото]. [SalePrice] FROM Photo; В настоящее время выпадающее меню появляется со всеми доступными SalesPrices со всех фотографий, но я хочу, чтобы цена была только той, которая соответствует фотографии строки. – user3545910

+0

Кажется, что поле 'Cost' является полем поиска. В качестве быстрого теста экспортируйте таблицу в Excel. Затем, когда вы открываете рабочий лист, значения в столбце 'Cost', что вы ожидаете? Действительно ли они являются значениями '[ID]', а не '[SalePrice]' значениями? – HansUp

ответ

0

Это другое направление, чем вы планируете, но можете достичь того, что вы пытаетесь построить.

Чтобы поддерживать нормализацию базы данных, вы обычно не хотите сохранять поле в нескольких таблицах, потому что оно тратит ресурсы, сохраняя одну и ту же информацию в двух местах. Попытка связать данные в одной таблице с другой может быть выполнена с помощью простого запроса, используемого в качестве источника данных вашей подформы (вместо использования таблицы).

Скопируйте следующий код в представление SQL нового запроса и перезапишите ссылку управления формами [MyInvoiceFormName]![MyInvoiceTextboxName], чтобы соответствовать имени вашего текстового поля формы и идентификатора счета. Убедитесь, что он потянул нужные данные, запустив его (ваша форма должна быть в виде формы, а идентификатор счета должен быть отображен в текстовом поле формы для правильной работы). Если данные выглядят правильно, назовите/сохраните их.

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

Тогда в конструкторском зрении вашей формы, перетащите новый запрос из панели навигации в область, которую вы хотите, чтобы ваш подчиненный появятся, он должен создать подчиненный из сохраненного запроса автоматически.

Теперь он должен показать вам соответствующие записи для идентификатора счета, показанного в основной форме. Но он не может обновляться при выборе нового клиента или нового идентификатора счета. Чтобы это произошло, вам просто нужно добавить команду .requery в событие AfterUpdate элемента управления, которое вы хотите активировать обновление подформы. Если вы знакомы с VBA, вы можете вставить этот код в коде строитель для AfterUpdate события:

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

Теперь подчиненный следует обновлять после каждого изменения выбора.

Смежные вопросы