如何通过OpenRecordset(DAO)删除所有数据库行

时间:2009-09-14 12:30:25

标签: ms-access vba

如何在开始插入之前从表中删除所有行?

4 个答案:

答案 0 :(得分:2)

两件事。首先,DAO vs ADO几乎无关紧要。它们都可以通过Windows 7和AFAIK进行访问,没有计划将其删除。要么在Access中使用也可以。 其次,你可以这样做:

Public Sub Example()
    With Access.CurrentDb
        .Execute "DELETE Table2.* FROM Table2;"
        .Execute "INSERT INTO Table2 ( fld1, fld2 ) SELECT Table1.ID, Table1.MyField FROM Table1;"
    End With
End Sub

你可以这样:

Public Sub Example()
    With Access.DoCmd
        .RunSQL "DELETE Table2.* FROM Table2;"
        .RunSQL "INSERT INTO Table2 ( fld1, fld2 ) SELECT Table1.ID, Table1.MyField FROM Table1;"
    End With
End Sub

但是Execute方法会抛出更多信息性的错误消息(如果你还在乎,那就是DAO)。

答案 1 :(得分:1)

如果您正在编程vba,我假设您正在使用Adodb或仅使用ADO。 因此,为了删除表记录,您可以使用命令对象来执行此操作。

Dim cnn as Connection
Dim cmd as Command

Set cnn=new Connection()
cnn.ConnectionString="ConnectionString"
cnn.Open()

Set cmd=new Command()
cmd.ActiveConnection=cnn
cmd.CommandText="DELETE FROM MyTable"
cmd.Execute()

cnn.Close()

更新: 要使用ADO对象,您应该添加对ADODB库的引用

答案 2 :(得分:-1)

据我所知,DAO Recordsets没有有效的方法来清空表。如果它是一个小桌子,你可以删除逐个记录,但我会觉得很傻。我只是使用DoCmd.RunSQL来运行DELETE查询。当然,我通常会暂时将SetWarnings设置为False。

由于这与DAO是分开的,因此我会在正确打开记录集之前看到该操作。

答案 3 :(得分:-1)

请试试这个:

Do While Not rs.EOF
rs.Delete
rs.MoveNext
Loop