以下代码(以ADP形式)是否有问题?
Private Sub cmbSearchCode_AfterUpdate()
Me.Recordset.Find "usr_cde = '" & ctl & "'"`
ctl = null
end sub
它的行为不规律:第一次打开表单后,它工作,然后突然它似乎不再做任何事情。
我用下面的代码替换了它,看起来没有问题:
With Me.RecordsetClone
.Find "usr_cde = '" & ctl & "'"
Me.Bookmark = .Bookmark
End With
ctl = Null
有什么解释吗?客户端是A2003,服务器是SS 2000(我知道它是旧的,我无能为力!)
记录集属性是一个相当新的访问,有几个位在帮助文本,这是他们如何结合,我相信是导致你的问题。
如果表单是基于查询的,例如,引用记录集属性相当于克隆记录集对象使用相同的查询。但是,与使用RecordsetClone不同属性,更改返回的记录集中当前的记录属性的当前记录也将设置形式。
因此,虽然起初看起来不像,但它实际上克隆了记录集并创建了它的新副本。只是让它保持同步。
所以你有一个新的记录集对象,这是问题:
一个新的记录集对象被自动添加到记录集集合,并在打开对象时自动删除你把它关上。
第一次,您克隆usr_cde上的记录集查找,然后表单神奇地设置当前记录以匹配。
第二次,您克隆在usr_cde上找到的记录集,但是神奇的记录同步仍然停留在记录集集合中持久化的记录集的第一个副本上。
所以你只需要关闭记录集,但要确保你不只是创建另一个副本并关闭,执行以下操作:
'untested
Private Sub cmbSearchCode_AfterUpdate()
Dim rs as adodb.Recordset
Set rs = Me.Recordset
rs.Find "usr_cde = '" & ctl & "'"`
rs.Close
ctl = null
end sub
我还没有机会测试这个,但是你已经有一个工作的解决方案使用。bookmark。我希望这解释了意外的行为。