从另一个表单中选择条件后,过滤子表单上的控件

时间:2017-01-26 18:40:12

标签: vba access-vba access

我有三个子格式我想过滤 - 我们称之为客户,项目和员工。我想在双击Address_ID后根据第四个表单Addresses对它们进行排序。所以基本上禁用这些表单,直到选择了Address_ID,然后根据给定的地址填充它们。

麻烦在于我不确定编码的位置或内容。我假设我需要在Address_ID控件上创建一个Double_Click事件。也许将该ID存储到变量中并以某种方式将其传递给父表单,其他3个表单可以引用它?

问题是我不知道如何完成它或者它是否会起作用。

2 个答案:

答案 0 :(得分:3)

您可以在地址子表单上创建Form_Current事件,并从每个子表单更新记录源(不是记录集)。这是我个人的首选方法,但有很多方法可以解决这种情况。以下是有关如何处理此问题的示例代码。

Private Sub Form_Current()
    Dim addressID As Integer
    Dim sql As String

    If IsNull(Me.addressID.Value) Then

        'disable subforms
        Form_frmHome.sbfCustomer.Enabled = False
        Form_frmHome.sbfEmployee.Enabled = False
        Form_frmHome.sbfItem.Enabled = False

    Else

        'enable subforms
        Form_frmHome.sbfCustomer.Enabled = True
        Form_frmHome.sbfEmployee.Enabled = True
        Form_frmHome.sbfItem.Enabled = True

         addressID = Me.addressID.Value

         'Customers
         sql = "SELECT * FROM tblCustomers WHERE AddressID = " & addressID
         Form_frmHome.sbfCustomer.Form.RecordSource = sql

         'Employees
         sql = "SELECT * FROM tblEmployees WHERE AddressID = " & addressID
         Form_frmHome.sbfEmployee.Form.RecordSource = sql

         'Items
         sql = "SELECT * FROM tblItems WHERE AddressID = " & addressID
         Form_frmHome.sbfItem.Form.RecordSource = sql

    End If
End Sub

答案 1 :(得分:0)

展开三个子窗体控件的Master / Link子字段以包含第四个的Address_ID:

[NameOfTheFourthSubformControl].Form!Address_ID

并且三个子表单将自动过滤(零代码)到当前的Address_ID。

NameOfTheFourthSubformControl 是父表单上的控件,而不是子表单本身的名称。