以前,我使用ListBox
及其Value
属性,以便从表中选择包含新添加记录的特定行。
使用类似的东西实现:
Me.listBox.Value = DLookup("ID", "myTable", searchCriteria)
Me.listBox.Requery
我将记录插入myTable
后,我会调用上面的代码刷新ListBox
并选择包含新记录的行。
我已经切换到Datasheet
,但它没有Value
属性。
我可以调用以下内容来刷新DataSheet
,但显然它没有突出显示包含新记录的行:
Forms!frmMyForm.datasheet_MySheet.Requery
完成我所描述的最佳方式是什么?
感谢
答案 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
的效果则不可见,因此除非您有匹配,否则不会移动所选记录。在你的情况下,这可能或不重要。