MS-Access 查询 DELETE * FROM 多个表

0 sql ms-access vba

在我的 Access 数据库中,我有 15 个表。我想执行 [DELETE * FROM table4, table7, table8, table9, table10, table11]。这不起作用,但是当我使用一个表运行查询时,它会起作用,它会删除该表中的所有记录。我希望它在单个查询或单个 Visual Basic 模块中为多个表工作。

也许我不明白 SQL,也许这必须用 Visual Basic 来完成?

提前致谢。

Par*_*ait 5

MS Access 的存储 SQL 查询一次只允许一个 DML 或 DDL 语句。对于迭代操作,请考虑使用应用层代码(例如 VBA)或任何可以 ODBC 连接到 .mdb/.accdb 文件的语言在循环中运行操作查询。此外,DELETE在 MS Access SQL 中不需要星号。

VBA (使用内置的 DAO CurrentDb 对象)

Dim var as Variant

For Each var In Array("table4", "table7", "table8", "table9", "table10", "table11")
   CurrentDb.Execute "DELETE FROM " & var, dbFailOnError
Next var
Run Code Online (Sandbox Code Playgroud)

开源替代品

Python (使用 pyodbc 模块)

import pyodbc

database = 'C:\\Path\\To\\Database\\File.accdb'
constr = "Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={0};".format(database)

db = pyodbc.connect(constr)
cur = db.cursor()

for i in ["table4", "table7", "table8", "table9", "table10", "table11"]:
    cur.execute("DELETE FROM {}".format(i))
    db.commit()

cur.close()
db.close()
Run Code Online (Sandbox Code Playgroud)

PHP (确保在 .ini 文件中取消注释 pdo_odbc)

$database="C:\Path\To\Database\File.accdb";

try {
  $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=$database;");

  foreach(array("table4", "table7", "table8", "table9", "table10", "table11") as $tbl){
       $sql = "DELETE FROM ".$tbl;    
       $STH = $dbh->query($sql);    
  }
}
catch(PDOException $e) {  
  echo $e->getMessage()."\n";
  exit;
}

$dbh = null;
Run Code Online (Sandbox Code Playgroud)

R (使用 RDOBC 包)

library(RODBC)

database <- "C:\\Path\\To\\Database\\File.accdb"
conn <- odbcDriverConnect(paste0('Driver={Microsoft Access Driver (*.mdb, *.accdb)};
                                  DBQ=', database))

lapply(c("table4", "table7", "table8", "table9", "table10", "table11"),
          function(t) sqlQuery(conn, paste0("DELETE FROM ", t)))

close(conn)
Run Code Online (Sandbox Code Playgroud)