代码之家  ›  专栏  ›  技术社区  ›  Benjamin Oakes

在Access中有选择地删除许多表?

  •  1
  • Benjamin Oakes  · 技术社区  · 16 年前

    我需要删除access2003中180个表中的175个(使用access2000格式的数据库)。我尝试的第一件事是转到表列表并尝试选择全部,控制单击要保留的表,然后选择“删除”。但是,事实证明,一次只能选择一个。

    然后我找到了一种方法,以纯文本的形式获取所有表名的列表,并制作了一组 drop 使用Vim的语句:

    drop table table_1;
    drop table table_2;
    ...
    drop table table_175;
    

    (显然,这些不是真名。)这些语句本身工作正常(即,一次只执行一个语句,但当我尝试运行其中的两个或多个语句时,会收到一条错误消息:

    Syntax error in DROP TABLE or DROP INDEX.
    

    这似乎违背了目的。哦,访问。。。你总是让我想把头发拔出来。

    3 回复  |  直到 12 年前
        1
  •  2
  •   JeffO    16 年前

    Remou已经找到了问题的答案,但是作为建议,您可能需要将要保留的表导入到一个新文件中。您可以选择多个文件及其数据。您可能会得到一个更干净的文件,除非您还有很多表。

        2
  •  2
  •   Fionnuala    16 年前

    使用VBA。

    For Each tbl In CurrentDb.TableDefs
        If Left(tbl.Name,4) <> "Msys" Then
            s = "DROP TABLE " & tbl.Name
            CurrentDb.Execute s
        End If
    Next
    
    For i = ( CurrentDb.TableDefs.Count - 1 ) To 0 Step -1
        If Left(tbl.Name,4) <> "Msys" Then
            ''Debug.Print CurrentDb.TableDefs(i).Name
            CurrentDb.TableDefs.Delete CurrentDb.TableDefs(i).Name
        End If
    Next
    

    如果要删除特定的表或表是相关的,则可能必须提供一个数组或记录集并遍历该数组或记录集。

        3
  •  1
  •   David Boyle    15 年前

    如上所述,一般来说,我们使用对象模型和VBA删除表定义及其数据。

    Access不是一个基于控制台的RDBMS,你不能像sqlplus那样运行批处理脚本,如果你尝试的话,你肯定会被吓到。

    Access是一个应用程序容器和分析工具,所有过程应用程序都使用VBA或宏,它们的灵活性明显低于VBA。如果您