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

Ms access 如何通过OpenRecordset(DAO)删除所有数据库行,ms-access,vba,Ms Access,Vba,如何在开始插入行之前删除表中的所有行?如果您正在编程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.Comma

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

如果您正在编程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库的引用。首先,DAO和ADO几乎是不相关的。它们都可以通过Windows7和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)

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

因为这与DAO是分开的,所以在正确打开记录集之前,我会先完成该操作

请尝试以下操作:

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

我建议您使用ADO而不是DAO。使用哪一种并不重要。“如果您正在编程vba,我假定您使用的是Adodb或ADO。”我很高兴您在开场白中提供了这个“我假定”限定符。但这种假设是毫无根据的,也是毫无帮助的。虽然您可能认为ADO是一项伟大的技术,但用户的需求并不意味着需要引入ADO.Meh。。。创建数据库时会自动引用这两个参数。DAO与ADO之争只有在人们认为MS可能最终摆脱DAO或至少用ADO替换Access对象模型中的DAO部分时才有意义。但是他们从来没有这样做过,现在ADO本身已经让位于ADO.Net。DAO还在,甚至RDO也还在。我认为你再使用哪一个都不重要了。这是一个很老的方法,但是,仅供参考,在创建一个新的DB文件时,这两个都不会自动引用。只有刀是空的。您必须自己添加ADO。我想在DAO和ADO主题上添加一点。披头士1692提供了一个ADO方法。Oorang提供了一个既不是一个也不是另一个的方法——它是一个Access VBA方法。实际上,该方法就是DAO;)如果选中,则currentdb是DAO.Database类型的属性。RunSQL是DAO.Database对象的方法。只是Access比ADO更完整地将DAO集成到了自己的对象模型中。
DoCmd.RunSQL
似乎促使人们使用
SetWarnings=False
,这既有风险又没有必要。使用
CurrentDb
CurrentProject.Connection的
.Execute
方法,而不是
RunSQL
。这两个选项中的任何一个都会很好地执行
DELETE
语句,并且不会诱使您将
SetWarnings
设置为off.+1以及HansUp的建议。我倾向于程序思维,而不是对象思维。这对我不利。这可能很慢。