我已经找到了如何使用以下链接遍历记录集:
Code to loop through all records in MS Access
但是,我想知道是否可以从记录集中删除记录,如果它不符合我在循环中指定的条件。
修改
我现在收到以下代码的错误:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("fieldHistory", dbOpenTable)
其中fieldHistory是我要打开的查询记录集的名称。为什么我收到此错误?最后一行代码是错误的来源,Access只是说“无效操作”
答案 0 :(得分:2)
是的,您可以使用DAO记录集的Delete方法删除当前记录。此示例将删除fname值为“xxx”的行。
Public Sub DeleteRecordsetRow()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tblDiscardMe", dbOpenTable)
Do While Not rs.EOF
If rs!fname = "xxx" Then
rs.Delete
'* the next line would trigger *'
'* error 3167: "Record is deleted." *'
''Debug.Print rs!fname
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
请注意,在rs.Delete之后(即在MoveNext之前),删除的行仍然是“当前”,但您无法访问其值。您可以取消注释Debug.Print行以进一步检查它。
修改强>: 由于您的记录源是查询而不是表,因此请尝试这样做以缩小您使用OpenRecordset时出错的原因。
Public Sub foo20110527a()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("fieldHistory")
If Not (rs.BOF And rs.EOF) Then
rs.MoveLast
MsgBox "RecordCount: " & rs.RecordCount
Else
MsgBox "No records"
End If
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
答案 1 :(得分:1)
由于您使用的是英语(而不是类似英语的技术术语),因此您的意图并不十分明确。你问你是否可以“......删除一条记录......”,这可能意味着你要删除它(在这种情况下,你已经有一个很好的答案形式HansUp),或者你想过滤掉它你没有看到它,而把它留在底层数据库中。
如果你的意图是后者(过滤),你有两个选择:
WHERE
调用中使用带有OpenRecordset
子句的SQL语句。.Filter
属性。Access可以在任何一个主题上提供足够的(如果不是很好的)帮助。