我有一个带有下拉列表的表单,可以更快地导航表单中的记录。它基于表单绑定的表。当值改变时(即点击下拉列表,选择一个条目),它应该跳转到正确的记录。
Access 2007具有“SearchForRecord”操作,可以执行我想要的操作。但是,Access 2003没有此功能。如何在Access 2007中执行此任务?
答案 0 :(得分:1)
您可以在组合框的OnChange事件中尝试以下代码,或者在选择完成后将其与按钮关联:
Private Sub cboExample_Change()
'Requires reference to Microsoft DAO 3.x Object Library '
Dim rs As DAO.Recordset
Set rs = Forms!frmExample.RecordsetClone
rs.FindFirst "[ExampleID] = " & Me.cboExample
If Not rs.NoMatch Then
Forms!frmExample.Bookmark = rs.Bookmark
End If
End Sub
希望这有帮助,
罗伯特
答案 1 :(得分:0)
您可能正在寻找FindFirst
方法。
以下是如何使用它的示例:
Function FindRecord (rstTemp As Recordset, _
strFind As String) As Boolean
rstTemp.FindFirst strFind
FindAny = IIf(rstTemp.NoMatch, False, True)
End Function
答案 2 :(得分:0)
比预期的要简单得多,使用了DoCmd.ApplyFilter。
Private Sub PK_Combo_Change()
DoCmd.ApplyFilter , "[PrimaryKey] = " & PK_Combo.Value
End Sub
答案 3 :(得分:0)
我会编辑@ Robert的代码:
With Forms!frmExample.RecordsetClone
FindFirst "[ExampleID] = " & Me!cboExample
If Not .NoMatch Then
If Me.Dirty Then Me.Dirty = False
Forms!frmExample.Bookmark = .Bookmark
End If
End With
我认为没有理由在该记录集已经存在时初始化记录集变量,并且可以在WITH块内轻松处理。
此外,在使用书签导航离开记录之前保存任何编辑都很重要,因为这会强制所有验证明确发生,而不是在记录离开时隐式发生。从历史上看,Jet书签导航很容易在隐式调用的保存中出现进食错误。据推测,与其他书签错误一起,已被标记出来,但我认为最好明确保存脏记录,而不是假设一切都会游泳。
咆哮:
由最近版本的Access(2007年之前,即2002年和2003年)的向导创建的此操作的代码是可怕的。它使用声明的记录集变量(如@ Robert的代码所做的那样),但在使用它之后不会将其清理(即,将其设置为Nothing)。它还使用表单的Recordset.Clone,而不是现有的.RecordsetClone(它们是不同的对象)。最后,它不使用.NoMatch,而是使用“If Not rs.EOF”,这听起来没什么意义。我被告知这样做的原因是它适用于具有ADO记录集的表单,但ADO记录集没有.FindFirst方法,所以这很荒谬。没错,你可以将.FindFirst改为.Find它会起作用,但这只是糟糕的,糟糕的代码。