MS-Access查询DELETE * FROM多个表

时间:2017-05-30 20:58:46

标签: sql vba ms-access

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

也许我不懂SQL,也许这必须用Visual Basic完成?

感谢高级。

1 个答案:

答案 0 :(得分:3)

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

VBA (使用内置DAO CurrentDb对象)

DELETE

开源替代

Python (使用pyodbc模块)

Dim var as Variant

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

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

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()

R (使用RDOBC包)

$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;