子窗体仅显示单个记录

时间:2009-06-10 19:06:38

标签: ms-access records subform

我有一个嵌入表单(用户)的子表单(用户子表单)。我想要实现的是加载,子窗体应该显示表中的所有用户和主窗体上的控件作为过滤器。

如果从主窗体中的组合框中选择用户A,则只有用户A的详细信息显示在子窗体中 如果从主窗体中的组合框中清除选择(即userA),则将在子窗体中再次弹出所有记录。

这个声音非常简单但是对于初学者来说,当我加载表单时,子表单中只显示1条记录,如果我在用户组合框中进行选择,则该用户的记录仅显示。如果所有我能看到的是一次记录,无论是否进行选择,它都会破坏拥有子表单的目的。

我正在使用Access '03。有人能帮忙吗。我有一个示例数据库,已经设法实现这一点,但我似乎找不到他们的设置相比我的。

4 个答案:

答案 0 :(得分:2)

我认为您将子表单设置为“连续表单”或“数据表”。

当您的表单打开时,您的过滤器是否还有其他内容?您可能希望在主表单打开时明确清除它,然后刷新数据。

修改
这是我以前做过的事情:

Private Sub cmdCannedFilter_Click()
On Error GoTo Err_Click    
Dim strFilter As String
    strFilter = "(1 = 1)"
    strFilter = strFilter & " " & _
            "and (((someTable.Active)=Yes) "   

    Me![List_SubForm].Form.FilterOn = False
    Me![List_SubForm].Form.Filter = strFilter
    Me![List_SubForm].Form.FilterOn = True

Exit_Click:
    Exit Sub

Err_Click:
    MsgBox Err.Description
    Resume Exit_Click
End Sub

在这种情况下,这是从主表单上的按钮运行,List_SubForm(显然)是子表单。我认为对我来说关键是必须关闭过滤器然后再打开。我不记得为什么。

(1 = 1)是因为我在其他地方做了类似的事情,我在他们的飞行中构建查询,这意味着我不必每次都决定是否需要插入and在那里或不在。

你在做类似的事吗?

答案 1 :(得分:2)

主表单应该没有记录源,并且应该没有链接标准。

过滤器控件的更新后事件应该更新子窗体的过滤器(如CodeSlave的代码那样),你可以分配子窗体的记录源(我倾向于选择后者,因为我不需要担心过滤器带来的所有问题。)

我过去曾多次这样做过,但通常没有使用子表单。我不喜欢数据表并使用连续表单,并将过滤控件放在表单的标题中。然后,您可以避免引用子窗体控件的困难(尽管这很容易,因为您可以使用With / End With块,如Praesagus的帖子中所示)。

关键是你想要主窗体UNBOUND,你想要你在标准中放置的控件来触发子窗体的过滤。

答案 2 :(得分:1)

听起来你在这里有两个不同的记录集。用户详细信息显示选择用户的时间。如果未选择任何用户,则您希望查看所有用户。如果是这种情况,请使用两个子表单并在它们之间切换 - 我们将其称为fAllUsers和fUserDetails。让我们调用子窗体控件名称sfUser。我假设用户表单上的主键和fUserDetails上的外键是userID。确保子表单没有与父项链接的任何字段 在父母:

Private Sub Form_Current()
    Dim sForm as string
    Dim sFilter as string
    Dim lUserID as long
    lUserID =nz(me!userID,0)
    sForm="fUserDetails"
    sFilter="userID=" & lUserID
    if lUserID<>0 then 
        sForm="fAllUsers"
        sFilter=""
    end if
    with sfUser
        .sourceobject=sForm
        .filter=sFilter
        .filteron=true
    end with
End Sub

希望有所帮助。

答案 3 :(得分:0)

我有一个名为“TmprryQryFrLnkFldsCrtn0123456789”的随机(Expletive)查询,我错误地删除了该问题,这给我的问题是只有一条记录显示在我的子表单上。我碰巧比较了我遇到的备份数据库和我遇到问题的数据库。

我恢复查询后,所有结果都再次显示。