我有一个嵌入表单(用户)的子表单(用户子表单)。我想要实现的是加载,子窗体应该显示表中的所有用户和主窗体上的控件作为过滤器。
即
如果从主窗体中的组合框中选择用户A,则只有用户A的详细信息显示在子窗体中
如果从主窗体中的组合框中清除选择(即userA),则将在子窗体中再次弹出所有记录。
这个声音非常简单但是对于初学者来说,当我加载表单时,子表单中只显示1条记录,如果我在用户组合框中进行选择,则该用户的记录仅显示。如果所有我能看到的是一次记录,无论是否进行选择,它都会破坏拥有子表单的目的。
我正在使用Access '03。有人能帮忙吗。我有一个示例数据库,已经设法实现这一点,但我似乎找不到他们的设置相比我的。
答案 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)查询,我错误地删除了该问题,这给我的问题是只有一条记录显示在我的子表单上。我碰巧比较了我遇到的备份数据库和我遇到问题的数据库。
我恢复查询后,所有结果都再次显示。