在我的 Access 数据库中,我有 15 个表。我想执行 [DELETE * FROM table4, table7, table8, table9, table10, table11]。这不起作用,但是当我使用一个表运行查询时,它会起作用,它会删除该表中的所有记录。我希望它在单个查询或单个 Visual Basic 模块中为多个表工作。
也许我不明白 SQL,也许这必须用 Visual Basic 来完成?
提前致谢。
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)