【问题标题】:Why do datasource of database-controls dissapear when Delphi crashes为什么Delphi崩溃时数据库控件的数据源会消失
【发布时间】:2021-03-22 05:21:24
【问题描述】:

我使用的是 Delphi 10.4.1 Enterprise,并使用 SQLite 数据库编写了一个 VCL 程序。

由于我怀疑是 OneDrive 问题,我提到源代码文件夹是 OneDrive 管理的区域的一部分。

有时,在调试过程中,我的 Delphi 程序会因未知原因挂起,并且 Delphi 会在没有进一步通知的情况下退出。每当发生这种情况时,MainForm 和 DataModule (DM1) 之间的连接就会丢失:在 MainForm 的 Object Inspector 中,所有 DataSource 分配,即与 DataModule 中的 DataSource 的连接都消失了。而且,当我重新加载程序时,会出现错误消息

模块“rtl270.bpl”中地址 500C3553 的访问冲突。读取地址 00000008

代码检查没有错误,但在编译时出现以下消息/请求:

模块“MainForm”链接到当前项目中找不到的模块“DM1”。您想删除/重定向到另一个模块的链接吗?

奇怪的是,IDE 中的 DataModule 设计表单不再可见,只保留了它的代码。因此,在 MainForm 中,DataModule 都不可见,因为 DB 控件的 DataSource 连接器中的下拉列表保持为空。最后但并非最不重要的一点是,当我尝试保存 MainForm 时,它说:

模块“*MainForm”引用了另一个模块,在加载 DM1 之前无法保存

无论我试图让它恢复正常,它都没有成功。 但是,在 OneDrive 根文件夹中,我看到一个名为“.849C9593-D756-4E56-8D6E-..etc..”的文件,它似乎与我的程序相关联,因为它的文件日期。只有关闭OneDrive才能删除或修改,重启后又恢复了。

我已经被困了很多天了。

有没有人知道发生了什么事,可以给我提示如何进行?

【问题讨论】:

  • 验证保存所有内容的选项是否打开(选项/IDE/保存和桌面/编译或运行时保存文件)。
  • 问题是如果 OneDrive 管理输出目录,因为这会导致大量流量和二进制文件的锁定争用,这可能会导致 IDE 出现问题。
  • 我时不时遇到类似的问题,至少症状是:AV in 'rtl270.bpl' + "Module XXX links to module YYY which can't be found..." + "DataModule design IDE 中的表单不再可见,只有其代码“仍然存在。”。对我有帮助:关闭 IDE,在外部编辑器中打开 DataModule 的 dmf,找到 Active=True 的所有事务对象并将其编辑为 Active = false .然后在IDE中打开项目,一切正常。我使用Google Drive File Stream + IBExpress进行DB访问,但症状看起来很相似,所以值得一试。
  • 谢谢你,Brian:我把所有文件都移到了 C:\Apps\.. 文件夹中,对于 OneDrive 的贪婪手指来说太远了。确实有什么东西因此而破产了,尽管我仍然不知道是怎么回事。

标签: delphi crash datamodule


【解决方案1】:

在我尝试将数据源连接恢复到位后,我发现了导致访问冲突的原因。我通过编辑 Mainform 的 DFM 文件来做到这一点,而不是直接在 Object Inspector 中。 我通常在 dfm 文件中进行编辑,但似乎不允许添加带有数据源分配的行。这对我来说是一个非常艰难的教训! 我很高兴程序再次运行。感谢大家的宝贵时间,尤其是@Remy。

谢谢, JGMS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多