根据第二个数据表

时间:2015-11-30 18:13:02

标签: sql ms-access access-vba

我有一个包含两个子表单的表单,格式如下:

Subform Example 1

在Subform1上,Element1具有Data1。 Data1的值指向Subform2上的Data1,其值为Value1

现在两个子表单都显示每个表中的所有数据。我想要做的是根据Subform1中选择的行过滤Subform2。

Subform Example 2

在此示例中,选择了Element3,因此Data3 Value3对显示在Subform2中。

我已经尝试通过改变Subform2上的SQL来实现这一点,但我所做的一切似乎都没有。我不知道我是否在寻找合适的地方,或者我是否应该寻找其他地方。

如果还有其他我需要提供的内容,请随时指出。我想提供足够的信息来找到解决方案。

3 个答案:

答案 0 :(得分:3)

您可以通过在subform1的OnCurrent事件上更改Subform2的记录源来实现。执行此操作的步骤如下: -

  • 在设计视图中打开表单
  • 转到subform1
  • 的属性
  • 转到活动标签
  • 从oncurrent组合中选择eventprocedure
  • 双击事件旁边的按钮以转至vba窗口
  • 插入以下代码

    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。您可能需要更改mainformsubform的名称以及我呼叫element的列名称。

答案 2 :(得分:0)

使用其他答案中的方法的结果和解释

好的,所以我最终找到了针对我的具体问题的解决方案,并希望通过在这里分享,它将在未来帮助其他人。

此问题的其他解决方案假设您的表单层次结构如下:

MainForm->Subform1->Subform2

同样,第二个子表单由第一个表单所有并拥有。这适用于大多数应用程序,但不适用于Subform1和Subform2都是数据表的情况。

我的案例中的层次结构,以及我希望将来帮助的人员的层次结构如下:

MainForm->Subform1
MainForm->Subform2

同样,第二个子表单不归第一个子表单所有。

不幸的是,使用此层次结构,其他解决方案中的代码不起作用。但是,有一个简单的解决方法:

使用隐藏文本框控件作为Subform1和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”中。

如果您有任何疑问或需要进一步说明,请对此答案发表评论,我会尽力提供帮助。