我的任务是创建一个简单的应用程序,以使用Access 2007维护用户的收藏品集合。我创建并实现了一些请求。那些是:
我已根据用户请求创建了应用程序,但到目前为止,有一件事困扰着我们。子表单的第一条记录与主表单相同。我们都觉得多余,烦人。当然,我的Access技能最多也很弱,所以这可能是一个简单的修复,但有没有办法删除子表单中的重复记录?我已经尝试在子窗体中实现where子句,声明在主窗体中不包含“图ID”。问题是,它就像一个参数提示,当我打开子表单或主表单时,询问主表单的FigureID。如果我输入图ID,它可以工作,但提示是显然不需要的。
仅供参考:
答案 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 。它是一种控制,而不是一种形式。子窗体控件可能与其包含的窗体具有相同的名称。但它可能是一个不同的名称。