我有Microsoft Access数据库(mdb文件),其中包含一个表(我们称之为表A),该表链接到另一个Microsoft Access数据库(我们称之为表B)。我需要能够使用php更新表A(这将更新表B,因为A链接到B)。请注意,我链接的表格有一个名为" Intersection"它被设置为索引:是(没有重复)。
如果我使用简单的odbc_connect
和odbc_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 Driver]操作必须使用可更新的查询。,SQL 在第413行的G:\ web \ libs \ test.php中的SQLExecDirect中声明S1000
由于某种原因,我的数据库似乎不可更新,即使它应该是。它有一个主键定义,是一个简单的表(除了它的链接)。最初我收到了以下错误:
警告:odbc_exec()[function.odbc-exec]:SQL错误:[Microsoft] [ODBC Microsoft Access Driver]' H:\ test \ Database \ test.mdb'不是有效的 路径。确保路径名称拼写正确并且您 连接到文件所在的服务器。,SQL状态 位于第413行的G:\ web \ libs \ test.php中的SQLExecDirect中的S1009
但后来我更改了我的链接表,所以我没有使用驱动器号导航到链接表,而是使用绝对\ server \ path,这似乎解决了这个问题,但是它不能更新。< / p>
如果它有帮助,创建链表,我所做的就是(使用MS Access 2010)我点击&#34;外部数据&#34;选项卡,然后&#34;访问&#34; (按钮),然后我确保通过创建链接表&#34;链接到源#34; (选项)我选择了包含原始表的其他数据库。
有没有办法使用php在链接访问表上运行更新?
同样,如果您有一个链接到另一个表的MS Access链接表,并且这些表具有正确索引的主键。您无法使用上面的PHP代码更新表格(即使它在未链接的表格上完全正常工作)。
请注意,我已经使用新的accdb数据库文件对其进行了测试,如果它是链接表,如果您尝试使用odbc_exec更新表,它似乎将变为只读,但它确实返回数据很好,我只是不能插入或更新记录。
谢谢。
[UPDATE]
我们的服务器正在运行带有apache和php的Windows Server 2003。所以我设置了一个带有apache和php的Windows 7机器, IS 能够毫无问题地更新链接数据库,所以我怀疑我的问题(因为它是唯一的区别可能影响这个的机器是,Win2003服务器运行odbc v3.5而我的win7机器正在运行odbc v6.1。我还在进一步研究这个问题,如果我找到一个解决方案让它在我们的Windows Server 2003机器上工作,我会更新这篇文章。