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

时间:2019-06-24 23:56:02

标签: forms ms-access

我有这些表:

  • tblOrders (“ OrderId”,“ Date”,“ Client”)
  • tblOrderDetails (“ ID”,“ OrderId”,“产品”,“数量”,“价格”)
  • tblPriceList (“ PriceId”,“从日期”,“到日期”,“客户”,“产品”,“价格”)

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

我设法创建了一个连接这3个表的查询,但是由于关系复杂,我无法以该形式创建新的记录集。 我还尝试通过在 tblOrderDetails 子窗体中创建一个带有Dlookup的文本框来从每个订单行的 tblPricelist 获取正确的“价格”。但是后来我找不到从 tblOrderDetails 的'Price'字段中存储此值的方法。

有什么办法解决这个问题?也许数据库设计有变化?

1 个答案:

答案 0 :(得分:0)

大概是在创建新的订单明细时,用户首先选择一个产品(从下拉列表中选择),并且“数量”可能默认为1。

在产品更新的AfterUpdate事件中(使用VBA)

o

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

我假设“客户ID”出现在父窗体的某个名为“客户”的控件中。还要将相同的功能放在“数量”的AfterUpdate中,那么您就可以了。

无需对订单明细使用复杂的查询,只需将子表单基于表格,并使用“主/子”关系对其进行控制即可。

您是否不愿意使用VBA?

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