以下代码是否有问题(以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(我知道它已经老了,我无能为力!)
答案 0 :(得分:0)
Form.Recordset Property是一个相当新的访问权限,帮助文件中有几个位,它们是我们认为导致你的问题的结合方式。
如果表单基于查询,例如,请参阅 Recordset属性相当于克隆Recordset对象 使用相同的查询。但是,与使用RecordsetClone不同 属性,更改返回的记录集中的当前记录 通过表单的Recordset属性也设置了当前的记录 形式。
因此,虽然它最初看起来并不像它,但它确实克隆了记录集并创建了它的新副本。只是让它保持同步。
所以你有了一个新的Recordset Object,这就是摩擦:
新的Recordset对象会自动添加到Recordsets中 打开对象时的集合,并在自动删除时 你关闭它。
第一次,你在usr_cde上克隆记录集find,并且表单神奇地设置当前记录以匹配。
第二次,你在usr_cde上克隆了记录集find,但是魔法记录同步仍然停留在Recordsets集合中持久存在的记录集的第一个副本上。
所以你只需要关闭记录集,但要确保你不只是创建另一个副本并关闭它,执行以下操作:
'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的工作解决方案。我希望这可以解释意外行为。