2

我有一个地毯公司的数据库。我有一个表格,可以让用户进行报价,包括选择客户等。还有一个处理产品和附加品的子表格,包括数量和单价。要说明用户是否需要拟合,有一个复选框。勾选后,我希望将配件作为产品之一添加到子表单中。通常使用下拉菜单手动选择产品。

重要属性有:
表单名称:订单
子表单名称:订单详细信息 子
表单 复选框名称:产品的拟合
字段名称:产品 ID
链接到表的子表单:订单详细信息
链接到表的表单:订单

我假设需要 VBA 或宏生成器。

无论如何提前谢谢!

4

3 回答 3

2

我认为最简单的方法是使用附加查询。

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
于 2009-02-03T14:44:59.123 回答
1

在复选框控件上,您将在复选框的更新后事件上添加一个[事件过程](参见属性窗口)。这将删除 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 了)。

再说一次,也许您不想使用复选框,而只是将配件作为另一个下拉选项,就像其他产品一样。每当创建新订单时,您始终可以确保它自动填充到 [订单详细信息] 中,这样就不会被遗忘。这将与产品选择用户界面的其余部分更加一致。

于 2009-02-03T16:17:19.310 回答
0

这是无代码解决方案:

去掉 Fitting 复选框。制作适合产品并像其他所有产品一样添加它。如果您想知道订单是否需要配件(我猜这就是您有复选框的原因。),您可以创建查询以查看配件是否是您的报告/发票上的产品之一。

于 2009-02-04T14:08:03.457 回答