我无法使用visual fox pro OLE DB Provider(vfpoledb.dll)在php中写入VFP数据库。使用select语句访问数据没有问题,如本问题所述和回答:
然而,当谈到写作时,我很难接受
Cannot update the cursor ''tablename'', since it is read-only.
我认为这个问题的解决方案是在msn article中描述的Open命令中包含 Mode =“ReadWrite”(也尝试过Share Exclusive),如下: / p>
$conn = new COM("ADODB.Connection");
$conn->Open('Provider="VFPOLEDB.1";Data Source="' . $filename . '";Mode="ReadWrite";');
但是,在执行如下语句时仍然会收到相同的错误:
$up = $conn->Execute("UPDATE tablename SET fieldname='Testing' WHERE fieldname = 'somevalue'");
任何想法,甚至可能吗?
其他人喜欢包装遗留系统吗?
答案 0 :(得分:0)
此表是VFP数据库的一部分吗?您是否检查过.DBF或.DBC的文件属性以查看它们是否为只读?此错误通常表示DBF或索引(CDX或IDX)标记为只读。
或者,您可能已执行SELECT * FROM TABLE INTO CURSOR MyCURSOR,这会使游标MyCURSOR成为只读。在这种情况下,您可能希望将READWRITE子句添加到SELECT语句。
答案 1 :(得分:0)
不要忘记您遇到的其他问题,但我对之前提到的帖子的回答特别提到了连接字符串。由于您没有显示文件名变量值的值,并且通过名称OF该变量,我假设它是您要更新的实际表的全名。如果是这样,这是不正确的。
在为VFP建立连接时,您希望连接到数据表所在的实际PATH,而不是实际的表名本身。连接后,您可以查询该PATH中的任何表(如果您愿意,也可以查询子文件夹)。
确保您的连接指向PATH而不是实际的table.dbf引用。