我有一个包含两个子表单的表单,格式如下:
在Subform1上,Element1具有Data1。 Data1的值指向Subform2上的Data1,其值为Value1
现在两个子表单都显示每个表中的所有数据。我想要做的是根据Subform1中选择的行过滤Subform2。
在此示例中,选择了Element3,因此Data3 Value3对显示在Subform2中。
我已经尝试通过改变Subform2上的SQL来实现这一点,但我所做的一切似乎都没有。我不知道我是否在寻找合适的地方,或者我是否应该寻找其他地方。
如果还有其他我需要提供的内容,请随时指出。我想提供足够的信息来找到解决方案。
答案 0 :(得分:3)
您可以通过在subform1的OnCurrent事件上更改Subform2的记录源来实现。执行此操作的步骤如下: -
插入以下代码
Private Sub Form_Current()
Me.Parent.Subform2.Form.RecordSource = "Select data,value From TableName Where data=" & Me.Data
End Sub
答案 1 :(得分:1)
在设计视图中打开subform2
的查询。然后将条件设置为=forms![mainform]![subform1].form![element]
。
然后在VBA中,当subform2
中的所选记录发生更改时,您需要重新查询subform 1
。转到on current
subform1
事件并使用以下内容:
private sub Form_Current()
forms![mainform]![subform2].requery
end sub
N.B。您可能需要更改mainform
,subform
的名称以及我呼叫element
的列名称。
答案 2 :(得分:0)
好的,所以我最终找到了针对我的具体问题的解决方案,并希望通过在这里分享,它将在未来帮助其他人。
此问题的其他解决方案假设您的表单层次结构如下:
MainForm->Subform1->Subform2
同样,第二个子表单由第一个表单所有并拥有。这适用于大多数应用程序,但不适用于Subform1和Subform2都是数据表的情况。
我的案例中的层次结构,以及我希望将来帮助的人员的层次结构如下:
MainForm->Subform1
MainForm->Subform2
同样,第二个子表单不归第一个子表单所有。
不幸的是,使用此层次结构,其他解决方案中的代码不起作用。但是,有一个简单的解决方法:
(以下方法使用我原始问题中的示例名称)
从设计视图中,在MainForm中创建一个文本框,而不是在Subform1或Subform2中。
在新创建的文本框控件的属性表上,在“控件源”属性下的“数据”选项卡下,输入以下代码:
=[Subform1].[Form]![Element1]
显然,将Subform1替换为您的第一个子表单,通常Element1将是该表的主键。
接下来,在文本框控件的属性表上,在格式选项卡下将属性“可见”更改为否。
接下来,我们将更改Subform2上的“链接主字段”和“链接子字段”属性,这些属性可以在属性表的“数据”选项卡上找到:
对于“链接主字段”属性,请输入您所制作的文本框控件的名称。默认名称的示例是Text5。我将我的文本框重命名为CurrentElementKey,但将其命名为您想要的任何名称。所以在我的“Link Master Fields”属性中,我放了CurrentElementKey。
对于“链接子字段”属性,由于我们将Subform1的主键放在文本框中,我们需要将它所关联的外键放在Subform2中。我不能确切地告诉你这会是什么样子,因为它会因你的情况而异。例如,您可能在第一个Subform上将Element1设置为Element1PK,将Subform2上的Foreign Key设置为Element1FK。所以你将Element1FK放在“Link Child Fields”中。
如果您有任何疑问或需要进一步说明,请对此答案发表评论,我会尽力提供帮助。