最近我需要将参数dbSeeChanges添加到Database对象的OpenRecordset方法中,以便为SQL Server渐进式迁移系统做准备。
问题是这个变化似乎以下列方式改变了Recordset对象的功能。
以前,如果我有一个没有返回任何记录的Recordset,并且我使用FindFirst方法,它会顺利地运行而没有错误,它只是没有找到任何东西并继续前进。但是现在,在相同的场景中,该操作会引发以下运行时错误:3021 "No current record"
给定一个不返回任何记录的记录集,下面的代码运行时没有错误:
Dim dbCurrDB As Dao.Database
Dim rstA As Recordset
Set dbCurrDB = CurrentDB
Set rstA = dbCurrDB.OpenRecordset("SomeTable", dbOpenDynaset)
With rst
.FindFirst "Id=1"
If .NoMatch=False Then
.Edit
!SomeField=SomeValue
.Uptade
End If
End With
在相同的条件下,下面的代码会在'。FindFirst "Id=1"指令:
Dim dbCurrDB As Dao.Database
Dim rstA As Recordset
Set dbCurrDB = CurrentDB
Set rstA = dbCurrDB.OpenRecordset("SomeTable", dbOpenDynaset, dbSeeChanges)
With rst
.FindFirst "Id=1"
If .NoMatch=False Then
.Edit
!SomeField=SomeValue
.Uptade
End If
End With
我知道如何解决这个问题(尽管它最终将迫使我纠正所有遗留…)。我想知道为什么会这样。到底是什么改变了?与记录集对象的指针的东西?还有,是否有其他意想不到的副作用。
我想知道是否有一些详细的DAO技术规范,可以向我展示幕后Recordset对象的方法到底发生了什么。
提前感谢!
检查记录,否则什么也找不到:
With rst
If .RecordCount > 0 Then
.FindFirst "Id=1"
If .NoMatch = False Then
.Edit
!SomeField.Value = SomeValue
.Update
End If
End If
.Close
End With