如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集

Posted

技术标签:

【中文标题】如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集【英文标题】:How to create/update a recordset in a form with complex table relationship in Microsoft Access 【发布时间】:2019-06-24 23:56:02 【问题描述】:

我有这些表:

tblOrders('OrderId'、'Date'、'Client') tblOrderDetails('Id'、'OrderId'、'Product'、'Qty'、'Price') tblPriceList('PriceId'、'From Date'、'To Date'、'Client'、'Product、'Price')

我根据 tblOrders 制作了一个表单,用户可以在其中输入:“日期”和“客户”。 然后我根据 tblOrderDetails 制作了一个子表单,用户在其中输入:每个订单行的“产品”和“数量”。 现在我需要在“数量”旁边显示每个“价格”,这取决于订单行的“产品”、“客户”和“日期”,如 tblPriceList 所示。 此外,当我在表单中更改客户或日期时,我需要在表单和表中自动更新这些“价格”值 tblOrderDetails

我设法创建了一个连接这 3 个表的查询,但由于关系复杂,我无法在表单中创建新记录集。 我还尝试在 tblOrderDetails 子表单中创建一个文本框,该文本框使用 Dlookup 从 tblPricelist 中为每个订单行获取正确的“价格”。但后来我没有找到一种方法将这些值存储在 tblOrderDetails 的“价格”字段中。

有没有办法解决这个问题?也许是数据库设计的改变?

【问题讨论】:

跳过tblOrderDetails 中的价格字段并通过加入tblOrderDetailswithtblOrdersonOrderID然后加入tblPricelistontblOrders.OrderID,tblOrders.Clientand 确定查询字段中的价格tblOrderDetails.Product获取匹配价格。 【参考方案1】:

大概在创建新的订单详情时,用户首先选择一个产品(从下拉列表中?),数量可能默认为 1。

o 在您的更新后事件(使用 VBA)中为 Product 下拉菜单,放置

Price = DLookup("Price","tblPriceList","Product = " & Me.Product & _ 
                                      " AND Client = " & Parent.Client & _ 
                                      " AND Date() Between [From Date] and [To Date]")

我假设客户端 ID 出现在名为“客户端”的控件中某处的父表单上。也把同样的功能放在Qty的AfterUpdate里,应该就OK了。

Order明细不需要复杂的查询,只需要在表格上建立子表单,用Master/Child关系来控制即可。

您不愿意使用 VBA?

很简单,只需右键单击产品下拉控件,选择属性,然后选择事件选项卡 然后单击 AfterUpdate 并选择省略号。单击“代码生成器”并输入您的 Me.Price = blah blah blah。 对数量控件执行相同操作。

【讨论】:

效果很好。但是,如果我突然决定更改日期或客户怎么办?我怎样才能更新所有价格而不必再次输入所有产品和数量?提前致谢。 我终于设法通过客户端和日期文本框的 AfterUpdate 事件来做到这一点,该事件运行带有 DLookup 的更新查询。

以上是关于如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Microsoft Access 数据库中创建查询对象? [复制]

如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集

在 Microsoft Access 中创建警告

使用 VBA 在 Microsoft Access 中创建表单

在 Microsoft Access 中创建快速输入功能

如何在access数据库中创建十进制字段?