【问题标题】:ADODB recordset error "Operation is not allowed when the object is open" (3705)ADODB 记录集错误“对象打开时不允许操作”(3705)
【发布时间】:2012-11-01 22:55:48
【问题描述】:

我有一个我支持的旧版 ASP 应用程序。我所说的支持是指自 2005 年左右以来我没有碰过它,因为它刚刚起作用。

但是,在 ASP 应用程序使用的 Access 数据库中存在一些数据问题。所以像个傻瓜一样,我直接通过文件共享打开数据库(使用 MS Access 2007),修复数据并将其保存下来(以 Access 2000 格式)。

现在应用程序将检索并显示数据正常,但任何更新都会失败并出现错误3705: Operation is not allowed when the object is open。我没有以任何方式更改代码,唯一的更改是数据更新和数据库保存。

我发现了很多这个错误的例子,但它们都与相当简单的问题有关,比如确保在打开记录集之前关闭它、更改 CursorLocation 枚举等。我已经尝试了其中的大部分,但都是徒劳的有些东西会起作用,但什么都没有。

有什么办法可以解决这个问题吗?

谢谢。

更新

我安装了一个基于 Web 的访问数据库管理系统,并尝试压缩和修复数据库。我收到了错误:

The Microsoft Jet database engine cannot open the file '<snip>'. It is
already opened exclusively by another user, or you need permission to view
its data. (-2147217911)

我已经运行了详细的宏 here 来确定谁登录到了数据库,并且只显示了管理员用户(在运行时是我)

【问题讨论】:

  • "保存下来" 您是保存还是另存为?你有一个 *.ldb 吗?你试过紧凑和修理吗?
  • 我保存了(不另存为)。没有 ldb 文件。发现问题后,我尝试了紧凑型和修复。谢谢。
  • 另一个想法,当你上传的时候,权限有没有改变?这可以解释为什么你能读但不能写。 MS Access 需要对文件和文件夹进行读/写。
  • 谢谢 - 这是我试图找出的东西(因为我只能访问文件共享)。但是,由于我只进行了保存(即,我没有明确地复制它或其他任何东西),我不会这么认为。我唯一不确定的是通过文件共享保存。

标签: asp-classic adodb recordset


【解决方案1】:

这些错误意味着一件事:数据库文件被其他进程打开,因此被锁定。

“基于 Web 的访问数据库管理系统”很可能是罪魁祸首,尝试找出如何将其配置为不锁定文件或摆脱它。

作为一种变通方法或验证真正问题的方法,您可以将 .mdb 文件复制到其他位置并更改经典 ASP 连接字符串以检查您是否可以在新位置更新数据库。

【讨论】:

  • 谢谢,这些都是正确的观点,但在这种情况下,@Remou 的评论帮助我解决了这个问题 - 这是一个文件/文件夹权限问题。
【解决方案2】:

@Remou 上面关于检查文件和文件夹权限的评论是正确的。

我让我们的服务器管理员检查了权限,似乎写权限已从文件夹中删除(并且文件也从文件夹继承了它们的权限)。他说以前直接通过文件共享保存时发生过这种情况。

(代替@Remou 的回答接受)

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多