我试图创建一个发票表,最后是一个自动从名为Photo的不同表中获取数据的表单。照片表有一个名为" salesprice"发票表中有一个名为" Cost"的字段。这些表由PhotoID的主键连接,该主键已经在组合框字段中链接。
目标是选择适当的PhotoID,然后将salesprice自动填充到Cost字段中。目前"成本" row是一个组合框,行源为:
SELECT [Photo].[ID], [Photo].[SalePrice] FROM Photo;
该字段现在有一个包含所有可用成本的下拉列表,但我希望它只有与行的照片ID相关联的成本。
我有点新的访问权限,但尝试了一些事情并且无法让它发挥作用。因为我将其实现为子表单,我认为除非有人有更好的方法,否则最好在表级执行此操作?蚂蚁帮助非常感谢!
答案 0 :(得分:0)
这与你前进的方向不同,但可以达到你想要建立的目标。
为了保持数据库规范化,您通常不希望在多个表中存储字段,因为它通过在两个位置存储相同的信息来浪费资源。尝试将一个表中的数据链接到另一个表可以通过一个简单的查询来完成,该查询用作子表单的数据源(而不是使用表)。
将以下代码复制到新查询的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
现在每次选择更改后子窗体都应该更新。