【问题标题】:Detect "Delay write failed" occurence检测“延迟写入失败”的发生
【发布时间】:2014-04-30 12:12:25
【问题描述】:

我对“延迟写入失败”错误失去了耐心。它默默地断开数据库与应用程序的连接,因此在使用它时不会将任何内容保存在数据库中。有没有办法检测事件本身,以便我可以发出警告?或者也许监视连接本身是否断开连接?每个人似乎都错过了 Windows XP 的气球提示,所以我想闪烁一个更明显的警告,即必须重新启动应用程序。微软似乎找到了一种迫使人们升级的方法...... 我想这可以通过计时器来完成,并不断检查连接的用户:

cxlabel1.Caption := IntToStr(DataModule2.ABSDatabase1.GetDBFileConnectionsCount);

但我想更多的是检查/检测事件本身。 Delphi中有什么东西可以检测到这一点吗? 我想听听您对此的想法...

【问题讨论】:

  • 出现这种情况时你在做什么? - 它默默地断开数据库与应用程序的连接:什么是“它”和“数据库”?什么类型的连接?
  • 除非您在磁盘/网络非常恶劣的环境中运行,否则您不应该经常看到“延迟写入错误”。如果没有充分的理由,您需要先修复 PC,然后再担心围绕它进行编码。
  • 它是一个小型的多用户数据库,以绝对数据库作为后端数据库。问题是,当断开连接发生时,Windows XP Flash 会延迟写入气球提示,但用户似乎错过了这一点。所以他们只是继续写入数据库,就好像什么都没发生一样。他们“看到”网格中输入的信息,但问题是实际上没有任何内容写入数据库。因此,如果您关闭程序,您从延迟写入错误中输入的所有内容都将永远丢失。 @afrasier - 你是对的......这是一个非常磁盘/网络敌对环境。但我不是网络管理员。
  • 这就是为什么我也不愿意使用计时器。它只会增加不必要的流量,使情况变得更糟。所以我可能不得不为这个场合使用一些其他的事件。该错误不会经常出现,但一旦出现,可能会造成损坏。
  • 在不改变写入数据的位置的情况下,我认为您只能教育用户不要拔出闪存驱动器。用户会犯错误。当他们这样做时,教育他们。他们学习并停止制造它们。您不必防止每一种类型的用户错误。

标签: delphi delphi-xe4


【解决方案1】:

将其作为答案,因为评论长度有限。

我以前见过这个。 IIRC,您遇到的问题是延迟写入错误是操作系统错误,它与您的应用程序无关。 Windows 已经告诉您写入已正确提交到磁盘。您将不得不尝试挂钩操作系统错误以查看何时发生这种情况。

您需要解决网络问题,因为这就是问题所在。在我们的情况下,是一个有故障的路由器导致了问题。

期望用户检查错误消息然后处理它是不公平的。当它发生时,他们可能会在午餐时外出,因为它不是立即的。他们也无法知道什么已经被保存,什么没有。数据库损坏只是时间问题。

计时器的问题在于它可能会告诉您一切正常,因为它会在网络解决问题后触发。

更好的方法是切换到客户端/服务器数据库。您可以通过设置自己的服务器来侦听 Web 服务或其他远程调用,或者切换到支持客户端/服务器的数据库,而不是使用基于文件的数据库来做到这一点。当数据保存出现问题时,它会立即告诉您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2021-04-09
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多