Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php在链接的MS Access表上运行更新_Php_Sql_Database_Ms Access - Fatal编程技术网

使用php在链接的MS Access表上运行更新

使用php在链接的MS Access表上运行更新,php,sql,database,ms-access,Php,Sql,Database,Ms Access,我有一个Microsoft Access数据库(mdb文件),其中有一个表(我们称之为表a),该表链接到另一个Microsoft Access数据库(我们称之为表B)。我需要能够使用php更新表A(这将反过来更新表B,因为A链接到B)。请注意,我链接到的表有一个名为“Intersection”的主键,它被设置为Indexed:Yes(无重复项) 如果我使用简单的odbc\u connect和odbc\u exec运行以下查询: $con= odbc_connect("Driver={Micros

我有一个Microsoft Access数据库(mdb文件),其中有一个表(我们称之为表a),该表链接到另一个Microsoft Access数据库(我们称之为表B)。我需要能够使用php更新表A(这将反过来更新表B,因为A链接到B)。请注意,我链接到的表有一个名为“Intersection”的主键,它被设置为Indexed:Yes(无重复项)

如果我使用简单的
odbc\u connect
odbc\u exec
运行以下查询:

$con= odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFilename", $user, $password)
$res = odbc_exec($con, "UPDATE tableA SET myfield=NULL WHERE myfield=2439;");
但是,当我在具有链接表的数据库上尝试此操作时,会出现以下错误:

警告:odbc_exec()[function.odbc exec]:SQL错误:[Microsoft][odbc] Microsoft Access驱动程序]操作必须使用可更新的查询SQL 在第413行的G:\web\libs\test.php中的SQLExecDirect中声明S1000

出于某种原因,我的数据库似乎是不可更新的,即使它应该是。它定义了一个主键,是一个简单的表(除了它是链接的)。最初,我遇到以下错误:

警告:odbc_exec()[function.odbc exec]:SQL错误:[Microsoft][odbc] Microsoft Access驱动程序]“H:\test\Database\test.mdb”不是有效的 路径确保路径名拼写正确,并且 已连接到文件所在的服务器。SQL状态 第413行G:\web\libs\test.php中SQLExecDirect中的S1009

但是后来我改变了我的链接表,所以我没有使用驱动器号导航到链接表,而是使用了absolute\server\path,它似乎解决了这个问题,但它无法更新

如果有帮助,创建链接表,我所做的就是(使用MS Access 2010)点击“外部数据”选项卡,然后点击“访问”(按钮),然后确保点击“通过创建链接表链接到源”(选项),然后选择包含原始表的另一个数据库

是否有办法使用php对链接的访问表运行更新?

同样,如果您有一个链接到另一个表的MS Access链接表,并且这些表有一个正确索引的主键。您无法使用上面的PHP代码更新表(即使它在未链接的表上完全正常工作)

请注意,我也用一个新的accdb数据库文件对此进行了测试,如果它是一个链接表,那么如果您尝试使用odbc_exec更新该表,它似乎将成为只读的,但是它返回的数据很好,我无法插入或更新记录

多谢各位

[更新]


我们的服务器使用apache和php运行Windows server 2003。因此,我用apache和php设置了一台Windows 7机器,它能够更新链接数据库而不会出现问题,因此我怀疑我的问题(因为这是可能影响这一点的机器之间的唯一区别)是Win2003服务器运行的是odbc v3.5,而我的win7机器运行的是odbc v6.1。我仍在进一步研究这篇文章,如果我能找到在Windows Server 2003计算机上运行的解决方案,我将更新这篇文章。

环顾其他一些网站,我发现了一些与权限相关的信息。这两个数据库都值得一看。我同意@JonSturdevant的观点,这可能是权限问题。具体来说,运行web服务器的帐户可能对包含数据库的远程文件夹没有写入权限,该数据库保存您要链接到的表。您可以尝试在自己的帐户下从命令行运行类似的PHP代码,看看这是否有什么不同。FWIW,我已经尝试了完全相同的代码,但是使用了一个普通的表(一个没有链接的表),效果非常好。我希望权限能解决这个问题。我没能找到解决这个问题的办法。非常感谢你们两位,我将尝试你们的两个建议,并向遇到与我相同问题的任何其他人报告结果。很抱歉,我有个坏消息,我添加了IUSR_服务器,并将其完全控制文件夹,但它仍然抛出相同的错误。另外,为了彻底起见,我也给了“所有人”完全控制权,但它仍然不断抛出“SQL状态S1000”错误,你们能想到其他的吗?或者其他人是否可以验证您是否可以使用odbc更新链接的microsoft access表?您是否也向数据库本身添加了权限?