Access 2003表单:下拉导航

时间:2009-07-29 14:04:17

标签: ms-access

我有一个带有下拉列表的表单,可以更快地导航表单中的记录。它基于表单绑定的表。当值改变时(即点击下拉列表,选择一个条目),它应该跳转到正确的记录。

Access 2007具有“SearchForRecord”操作,可以执行我想要的操作。但是,Access 2003没有此功能。如何在Access 2007中执行此任务?

4 个答案:

答案 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它会起作用,但这只是糟糕的,糟糕的代码。