基于主窗体中的字段访问2007过滤器子窗体?

时间:2011-07-06 03:39:51

标签: ms-access parameters ms-access-2007 subform

我的任务是创建一个简单的应用程序,以使用Access 2007维护用户的收藏品集合。我创建并实现了一些请求。那些是:

  1. 列出所有收藏品的一个主要表格
  2. 同一个主窗体下面有一个选项卡式控件,每个选项卡包含一个子窗体,该子窗体实际上根据主窗体中的不同条件“过滤”数据。例如,第一个子表单采用主窗体中可收集的图形的名称,并在子窗体中显示使用该名称的所有其他记录。换句话说,如果数字是“Darth Vader”,子表格将列出所有名为“Darth Vader”的收藏品。
  3. 我已根据用户请求创建了应用程序,但到目前为止,有一件事困扰着我们。子表单的第一条记录与主表单相同。我们都觉得多余,烦人。当然,我的Access技能最多也很弱,所以这可能是一个简单的修复,但有没有办法删除子表单中的重复记录?我已经尝试在子窗体中实现where子句,声明在主窗体中不包含“图ID”。问题是,它就像一个参数提示,当我打开子表单或主表单时,询问主表单的FigureID。如果我输入图ID,它可以工作,但提示是显然不需要的。

    仅供参考:

    1. 主要表单基于一个查询,该查询基本上从“数字”表和其他相关表中选择所有记录
    2. 当我将子窗体控件放到制表符控件上时创建了子窗体,我在其中链接了必要的主窗口和子字段

1 个答案:

答案 0 :(得分:1)

假设您有一个名为frmMain的表单。该表单在其记录源中包含两个字段:FigureID;和Figure_name。该表单还包括一个名为txtFigureID的文本框控件,该控件绑定到FigureID记录源字段。

frmMain还包含一个基于名为frmSub的表单的子表单控件。 frmSub的记录源还包括FigureID和Figure_name字段。子窗体控件的链接主/子字段属性是Figure_name。因此,frmSub将显示Figure_name与frmMain当前记录中相应值匹配的所有行。

现在,如果您希望frmSub排除特定记录(由唯一的FigureID值标识),这是frmMain中的当前记录,请向frmSub的记录源查询添加WHERE子句:

WHERE FigureID <> Forms!frmMain!txtFigureID

我只是在这里猜测,但希望描述足够接近你的实际情况才有用。如果没有,请向我们展示您正在使用的SQL作为子表单的记录源。

编辑:只有在首次打开frmMain时才会获得参数提示。之后,您可以在frmMain中的记录之间导航,而frmSub只显示您想要查看的记录...而不再要求您提供参数值。

发生这种情况的原因是因为子窗体在其父窗体之前加载 ...所以当子窗体加载时,父窗体上的控件不可用。

我认为解决方法可能是在记录源中没有WHERE条件的情况下保存子表单。然后,当主窗体加载时,它可以重写子窗体的记录源以包含WHERE条件。

所以,在frmMain的加载事件中:

Private Sub Form_Load()
    Dim strSql As String
    strSql = "SELECT FigureID, Figure_name FROM YourTable" & vbCrLf & _
        "WHERE FigureID <> Forms!frmMain!txtFigureID"
    Debug.Print strSql
    Me.subformControlName.Form.RecordSource = strSql
End Sub

注意 subformControlName 。它是一种控制,而不是一种形式。子窗体控件可能与其包含的窗体具有相同的名称。但它可能是一个不同的名称。