如何在数据表中选择包含新添加记录的行,类似于列表框?

时间:2018-03-09 03:15:22

标签: vba access-vba

以前,我使用ListBox及其Value属性,以便从表中选择包含新添加记录的特定行。

使用类似的东西实现:

Me.listBox.Value = DLookup("ID", "myTable", searchCriteria)
Me.listBox.Requery

我将记录插入myTable后,我会调用上面的代码刷新ListBox并选择包含新记录的行。

我已经切换到Datasheet,但它没有Value属性。

我可以调用以下内容来刷新DataSheet,但显然它没有突出显示包含新记录的行:

Forms!frmMyForm.datasheet_MySheet.Requery

完成我所描述的最佳方式是什么?

感谢

1 个答案:

答案 0 :(得分:1)

一种方法是使用书签移动到记录:

With datasheet_MySheet.Form
    .RecordsetClone.FindFirst searchCriteria
    If Not .RecordsetClone.NoMatch Then
        .Bookmark = .RecordsetClone.Bookmark
    End If
End With

...其中datasheet_MySheet是父表单上SubForm控件(数据表)的名称。

编辑:说明:

RecordsetClone是Form的Recordset的副本,其中包含表单的数据。 Recordset的FindFirst方法使匹配记录成为当前记录(在该Recordset中)。例如。如果searchCriteria"ID=6",则会移至ID为6的记录。将表单的Bookmark属性设置为Bookmark的{​​{1}}属性表单上的当前记录(以及明显选择的行)与RecordsetClone中的相同。换句话说,它在克隆中找到记录,然后将数据表的可见位置与克隆同步。

为什么要使用克隆?

为什么要使用RecordsetClone而不是Form.RecordsetClone.FindFirst?如果找不到匹配项,Form.Recordset.FindFirst将移动到第一行(奇怪的是,FindFirst属性返回False,表示匹配时没有匹配)。对NoMatch的效果是可见的,而对Form.Recordset的效果则不可见,因此除非您有匹配,否则不会移动所选记录。在你的情况下,这可能或不重要。