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

问题描述 投票:0回答:1

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

这是通过以下方式实现的:

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

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

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

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

Forms!frmMyForm.datasheet_MySheet.Requery

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

谢谢

vba access-vba
1个回答
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's Recordset的副本,其中包含表单的数据。 Recordset的FindFirst方法使匹配记录成为当前记录(在该Recordset中)。例如。如果searchCriteria"ID=6"那么它将移动到ID为6的记录。将Form的Bookmark属性设置为BookmarkRecordsetClone属性使得Form上的当前记录(因此明显选择的行)与刚才的相同发现在RecordsetClone。换句话说,它在克隆中找到记录,然后将数据表的可见位置与克隆同步。

为什么要使用克隆?

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

© www.soinside.com 2019 - 2024. All rights reserved.