我目前正在使用MS Access 2010模板进行联系。我已经修改它以进行多标准搜索,但它仍然是相同的。 我想知道的是如何修改单击“打开”时打开的联系人详细信息窗口。
基本上,我希望它打开窗口,但后来我想添加两个按钮以转到下一个人,而不必关闭窗口并重新打开另一个窗口。我添加了按钮,但打开的窗口是针对特定ID的,因此它不会转到下一条记录。
是否有人知道如何打开特定联系人的联系人详细信息窗口,但仍然可以浏览所有联系人? (他们是搜索后给出的联系人)
编辑:
好吧,我刚刚尝试创建一个克隆,但我得到的只是一个错误“3251 - 这种类型的对象不支持此操作。我对VBA代码比较新,所以它很难找到问题,但我猜它与记录集类型(DAO或ADO)有关。这就是我所拥有的:
Private Sub txtOpen_Click()
DoCmd.OpenForm "Contact Details", , , , , acHidden
With Forms![Contact Details]
.Recordset = Me.Recordset.Clone
.RecordsetClone.FindFirst "[ID]=" & Me!ID
If Not .NoMatch Then
.Bookmark = .RecordsetClone.Bookmark
End If
End With
End Sub
我现在正在调查它!
答案 0 :(得分:0)
我没有检查A2010联系人模板,但我猜你有一个结果列表,你选择一个,然后单击命令按钮打开详细信息。
可能这个命令按钮的代码如下:
DoCmd.OpenForm "frmContactDetails", , , "[ContactID]=" & Me!ContactID
...打开表单并将其过滤到单个记录。
要拥有可导航的记录集,您需要将表单过滤到搜索结果列表中显示的同一组记录,然后您将要在这些记录中导航。为此,您必须将条件设置为筛选结果列表的相同条件,然后导航到当前选定的记录。我不知道标准是什么,所以我只是用变量strCriteria
表示它,但要求是它的格式就像没有单词“WHERE”的SQL WHERE子句:
DoCmd.OpenForm "frmContactDetails", , , strCriteria
With Forms!frmContactDetails
.RecordsetClone.FindFirst "[ContactID]=" & Me!ContactID
If Not .NoMatch Then
.Bookmark = .RecordsetClone.Bookmark
End If
End WIth
这会将表单打开到同一组记录,然后导航到单击命令按钮以查看详细信息时在结果中选择的记录的ContactID。一旦该详细信息表格加载了该组记录,您就可以根据需要导航到下一个或上一个记录。
也可以打开详细信息表单并将表单的Recordset指定为结果表单Recordset的克隆,但我从未尝试过。在这种情况下,它会像(未经测试的代码,只是猜测如何完成):
DoCmd.OpenForm "frmContactDetails", , , , , acHidden
With Forms!frmContactDetails
.Recordset = Me.Recordset.Clone
.RecordsetClone.FindFirst "[ContactID]=" & Me!ContactID
If Not .NoMatch Then
.Bookmark = .RecordsetClone.Bookmark
End If
End WIth
要考虑的另一件事是根本没有弹出窗体,但是使用分割形式,这是在A2007中引入的,我还没有机会使用(没有完全切换到的客户端) A2007 / 2010)。它在同一表格上有一个列表视图和一个详细视图。
实现同样事情的老式方法是在未绑定表单上有两个子表单,顶部表单是结果列表,顶部表单是与顶部当前记录关联的详细表单形成。不需要代码,只需设置详细信息表单的LinkChild和LinkMaster属性,如下所示:
LinkMaster: ListForm.Form!ContactID
LinkChild: ContactID
这种方法和拆分形式都避免了弹出形式,我认为这种形式有点用户敌意(需要谨慎使用)。
您使用哪种方法取决于您的应用程序如何组合在一起。