Sql 如何使用Access ODBC通过一个查询更新多个表?

Sql 如何使用Access ODBC通过一个查询更新多个表?,sql,ms-access,odbc,Sql,Ms Access,Odbc,我做了彻底的搜索,但找不到这个问题的答案。我连接了Access ODBC,需要运行一个查询,根据一个值同时更新多个表 以下是我目前正在做的事情: $DSN="accessodbc"; $DSN_User="myusername"; $DSN_Passwd="mypassword"; $objConnect = odbc_connect( $DSN, $DSN_User, $DSN_Passwd ); $strSQL1="UPDATE table1 SET column1='dup' WHERE

我做了彻底的搜索,但找不到这个问题的答案。我连接了Access ODBC,需要运行一个查询,根据一个值同时更新多个表

以下是我目前正在做的事情:

$DSN="accessodbc";
$DSN_User="myusername";
$DSN_Passwd="mypassword";
$objConnect = odbc_connect( $DSN, $DSN_User, $DSN_Passwd );

$strSQL1="UPDATE table1 SET column1='dup' WHERE User=" . $user;
$strSQL2="UPDATE table2 SET column1='dup' WHERE User=" . $user;
$strSQL3="UPDATE table3 SET column1='dup' WHERE User=" . $user;

$objExec1 = odbc_exec($objConnect, $strSQL1);
$objExec2 = odbc_exec($objConnect, $strSQL2);
$objExec3 = odbc_exec($objConnect, $strSQL3);
…等等,大约50张桌子

这是可行的,但显然不是最好的解决方案。有没有办法用一个查询更新所有表


提前感谢。

否。您不能在一个查询中更新多个表。但是,您可以将所有更新放入一个事务中,并在所有更新结束时提交该事务

BEGIN TRANSACTION
   Do all your update statements.
COMMIT TRANSACTION

or, if something goes wrong: 

ROLLBACK TRANSACTION

虽然用一条SQL语句更新多个表是相当不寻常的,但在这种情况下,您可能可以(尽管为大约50个表实现这一点可能会带来很多麻烦)

为了记录在案,我刚刚在Access 2010和测试表中测试了以下内容

[表1]
用户栏1
----  -------
戈德
上下快速移动
[表二]
用户栏1
-----  -------
戈德
荷马
[表三]
用户栏1
--------  -------
戈德
泥潭
询问

更新
(
表1
内连接
表2
在表1上。用户=表2。用户
)
内连接
表3
在表2上。用户=表3。用户
设置
表1.1列1='dup',
表2.1列='dup',
表3.1列='dup'
其中table1.User='Gord'
导致

[表1]
用户栏1
----  -------
戈德杜普
上下快速移动
[表二]
用户栏1
-----  -------
戈德杜普
荷马
[表三]
用户栏1
--------  -------
戈德杜普
泥潭
怎么样

For I = 1 to 50
   $strSQL = "Update table" & I & " set column1 = 'dubp' WHERE User=" & $user
   Odb_exec($objContact,$strSQL)
Next i

对于Access SQL,绝对“否”实际上是不正确的。详情请参阅我的答案。谢谢您的回复。请解释一下“开始事务”、“提交事务”和“回滚事务”的代码好吗?我还是个新手,所以不知道你到底是什么意思。非常感谢。基本上,“开始交易”,打开一个“交易”。。。“提交”之前的所有操作在提交之前都不会发生。然后出于某种原因,比如一个错误,您可以不执行“提交”,而是执行“回滚”,即取消自“开始”以来的所有操作。查看此处了解更多详细信息。可以使用事务,但不能通过ODBC。因此,如果您使用dao reocrdset,那么您可以启动一个事务。感谢您提供此解决方案,我将尝试一下。