1

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

  1. 一个主要表格列出了他所有的收藏品
  2. 同一个主窗体在下面有一个选项卡式控件,每个选项卡都包含一个子窗体,该子窗体实际上根据主窗体的不同条件“过滤”数据。例如,第一个子表单在主表单中采用收藏品的名称,并在子表单中显示使用该名称的所有其他记录。换句话说,如果人物是“Darth Vader”,则子表单将列出所有名为“Darth Vader”的收藏品。

我已根据用户请求创建了应用程序,但到目前为止,有一件事困扰着我们俩。子窗体的第一条记录与主窗体相同。我们都觉得这是多余的,而且很烦人。当然,我的访问技能充其量是弱的,所以这可能是一个简单的修复,但是有没有办法删除子表单中的重复记录?我尝试在子表单中实现 where 子句,声明在主表单中不包含“图形 ID”。问题是,它就像一个参数提示,在我打开子窗体或主窗体时询问主窗体的 FigureID。如果我输入图形 ID,它可以工作,但提示显然是不想要的。

供参考:

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

1 回答 1

1

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

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

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

WHERE FigureID <> Forms!frmMain!txtFigureID

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

编辑:只有在第一次打开 frmMain 时才会收到参数提示。之后,您可以在 frmMain 中的记录之间导航,而 frmSub 仅向您显示您想要查看的记录......而无需再次要求您提供参数值。

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

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

所以,在 frmMain 的 load 事件中:

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。它是一个控件,而不是一个表单。子窗体控件可能与其包含的窗体具有相同的名称。但它可能是一个不同的名字。

于 2011-07-09T13:45:39.677 回答