我有一个地毯公司的数据库。我有一个表格,可以让用户进行报价,包括选择客户等。还有一个处理产品和附加品的子表格,包括数量和单价。要说明用户是否需要拟合,有一个复选框。勾选后,我希望将配件作为产品之一添加到子表单中。通常使用下拉菜单手动选择产品。
重要属性有:
表单名称:订单
子表单名称:订单详细信息 子
表单
复选框名称:产品的拟合
字段名称:产品 ID
链接到表的子表单:订单详细信息
链接到表的表单:订单
我假设需要 VBA 或宏生成器。
无论如何提前谢谢!
我认为最简单的方法是使用附加查询。
If Me.Fitting Then
strSQL="INSERT INTO [Order Details] (ProductID,OtherTextField) Values ("
& Me.ProductID & ",'" & Me.OtherTextField & "')"
CurrentDB.Execute strSQL, dbFailOnError
Me.[Subform control name here].Form.Requery
End If
在复选框控件上,您将在复选框的更新后事件上添加一个[事件过程](参见属性窗口)。这将删除 VBA 代码,单击省略号(“...”)以获取 VBA 代码。
您可以使用 Remou 的代码(经过一段时间)插入新产品:
If Me.Fitting Then
strSQL="INSERT INTO [Order Details] (ProductID,OtherTextField) " & _
"Values (" & _
Me.ProductID & ",'" & Me.OtherTextField & "')"
CurrentDB.Execute strSQL, dbFailOnError
Me.[Subform control name here].Form.Requery
End If
'[code not tested]
但是,您可能还想检查订单中不存在产品(您的业务规则是否允许安排多个配件),并且您可能还希望允许在配件产品存在时将其删除未选中 - 您可以在“结束 if”之前的 if 上使用 else 条件来做到这一点:
if 'blah
'blah blah
else
strSQL="Delete [Order Details] " & _
"where ProductID = " & Me.ProductID & " " & _
"and OtherTextField = 'fitting' "
CurrentDB.Execute strSQL, dbFailOnError
Me.[Subform control name here].Form.Requery
end if
'[code not tested]
您还必须破解您的 Products 子表单,这样如果您从中删除 Fitting 产品,您就可以更新复选框(或者这样您就不能删除 Fittings 了)。
再说一次,也许您不想使用复选框,而只是将配件作为另一个下拉选项,就像其他产品一样。每当创建新订单时,您始终可以确保它自动填充到 [订单详细信息] 中,这样就不会被遗忘。这将与产品选择用户界面的其余部分更加一致。
这是无代码解决方案:
去掉 Fitting 复选框。制作适合产品并像其他所有产品一样添加它。如果您想知道订单是否需要配件(我猜这就是您有复选框的原因。),您可以创建查询以查看配件是否是您的报告/发票上的产品之一。