access 删除记录vba代码

这是我的代码,每次事件触发时只能删除1条记录,而不是删除所有符合条件的,请高手帮忙看看
Private Sub Form_Current()
Dim rs As ADODB.Recordset
Dim strSQL As String
On Error GoTo HandleError

Set rs = New ADODB.Recordset

strSQL = "SELECT ALL * FROM 客户 " _
& "WHERE (Date() - [订货时间]) > " _
& 3

rs.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
With rs
If Not .EOF Then
'Delete the record:
.Delete
End If
End With

ExitHere:
rs.Close
Set rs = Nothing
Exit Sub

HandleError:
MsgBox Err.Description
Resume ExitHere
End Sub

删除/插入 (delete/insert) 利用的是CurrentDb.Execute(stSql)。
代码如下:
[plain] view plaincopy
'拼写删除指定PR Number的SQL文
stSql = "DELETE FROM [000_BASTS] WHERE [PR NR] = '" & pr_nr & "'"
'执行SQL文
CurrentDb.Execute (stSql)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-31
你的问题在於,你的代码本身就只执行了一次delete动作,
用个循环就可以了,
With rs
Do Until rs.EOF
.Delete
.MoveNext
Loop
End With

实际上,这样可以更方便:
Currentproject.Connection.execute strSQL

希望你能成功!
第2个回答  2013-08-31
这不是麻烦了吗? dim str as string
str="delete * FROM 客户 WHERE (Date() - [订货时间]) >3"
docmd.runsql str
就可以了追问

access操作数据库一般有几种方法?

追答

ado ,doa ,系统内置函数,一般就用这3种

追问

我使用的是ado,你答案的是?
还有那个比较方便

追答

ado 你写得是对的,
With rs
Do Until rs.EOF
.Delete
.MoveNext
Loop
End With
没有方便与不方便之说,只有习惯问题。有的用多种方法都可以实现,看你怎么用而已

本回答被提问者采纳
第3个回答  2013-08-31
直接用删除语句,不用打开一个记录集进行删除
CurrentProject.execute "delete from [客户] WHERE (Date() - [订货时间]) > 3"