我没有看到的一件事是ytdRS.Open命令。这可能是(问题的一部分)?
编辑:一些其他的东西:
- 你没有使用相同的名字记录在本块(ytdRS),所以我不知道你的意图是使用两个不同的记录(我假设它不是)
- 我不确定“值”是否打算作为记录集中字段的值(即
ytdRS!FieldName.Value
)或变量名称。在这种情况下,它是一个变量名称。
- 无论哪种方式,你几乎低保你要通过具有
if
语句中的MoveNext的打一个死循环,因为你的记录不会移动到除非Value
下一个记录等于1
- 我不得不改变CursorType和LockType来让你的例子在测试表上工作。我不认为adOpenStatic会允许你删除记录(我相信它会给你一个静态的或不可更改的光标)。当您遇到更新数据的问题时,通常似乎是一种方法。您用于锁定的adLockBatchOptimistic假定您以批处理模式运行;通常adLockOptimistic正常工作。如果需要,请参阅here以获取关于删除方法和批处理操作的更多信息。
下面的代码适用于我;您将不得不为您的特定应用程序进行编辑。尤其是,您需要编辑ytdRS.Source
,Open()
方法中的ActiveConnection:=
和ytdRs![Order ID].Value = 36
行,以符合您发布的代码块中的“Value”语句。
希望这会有所帮助!
如果您有任何问题,请让我知道。
Sub testme()
Dim ytdRs As ADODB.Recordset
Set ytdRs = New ADODB.Recordset
ytdRs.Source = "SELECT * FROM [Order Summary 2]"
ytdRs.CursorType = adOpenKeyset
ytdRs.LockType = adLockOptimistic
ytdRs.Open ActiveConnection:=CurrentProject.Connection
ytdRs.MoveFirst
Do Until ytdRs.EOF
If (ytdRs![Order ID].Value = 36) Then
ytdRs.Delete
End If
ytdRs.MoveNext
Loop
End Sub
如果您需要使用批处理模式...从Microsoft文档:“如果您处于批量更新模式,记录被标记为从缓存中删除,并且实际删除发生在您调用UpdateBatch方法。“_因此,在删除所有需要的记录后,您需要调用ytdRs.UpdateBatch。同样,如果您需要处于批处理模式,则仅为_only_。 – transistor1