在 Delphi 10.3 IDE 中运行时,Sqlite Firedac 数据库始终锁定 - 编译的可执行文件工作正常

问题描述 投票:0回答:3

我在使用 Delphi 10.3.1 中的

Firedac
Sqlite
数据库时遇到困难

我正在使用

Dbnavigator
和 DbGrid 将新记录直接输入到选定的表中。每次我尝试发布新记录时,都会收到 Firedac 错误消息“错误:数据库已锁定” 当我尝试删除记录时也会发生这种情况。仅当 IDE 运行时才会发生这种情况。我在许多论坛上读过几篇强调同一问题的帖子。我已尝试更改锁定模式设置,但问题仍然存在。必须离开 IDE、运行可执行文件、测试并重新进入 IDE 进行调试,这是相当令人沮丧的。

任何帮助将不胜感激。

sqlite delphi firedac
3个回答
4
投票

如果您在 IDE 中打开了 Sqlite 数据库或其中的表,则会出现“数据库已锁定”消息;这会在您的应用程序在运行时检测到并抱怨的数据库上放置一个锁。

解决方案很简单:确保该表未在 IDE 中打开,并且与该表的 FireDAC 连接也未处于活动状态。


0
投票

在我的应用程序中,我有一个负责返回连接的类,我实现了这个代码片段并解决了这个问题

function TModelConnection.Connection: TFDConnection;
begin
  System.TMonitor.Enter(FConnection);
  try
    Result := FConnection;
  finally
    System.TMonitor.Exit(FConnection);
  end;
end;

0
投票

我也有同样的问题,而且非常顽固! Delphi 11 Update 3 (CE),带有 Windows 32 位应用程序中的 CE 补丁。 基本上我可以在设计时访问我的 sqllite 数据库,但在运行时我根本无法访问它。总是引发数据库被锁定的异常。 我关闭了表单上的所有连接和数据访问组件,但无法摆脱错误。 最后,很偶然的机会我发现了这个:

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Connect_to_SQLite_database_(FireDAC)

在页面的中间部分,它说 sqllite dll 不随 Windows 版本的 delphi 一起提供。我按照链接下载了 32 位预编译版本,并将解压后的文件放在程序的可执行文件目录中。这在我下次编译时解决了问题。

我只是希望有一个使用 sqllite 和 delphi 的白痴指南,涵盖所有基础知识,包括如何创建数据库和表以及如何让系统在 IDE 中工作。在 BDE 和数据库浏览器时代,这要容易得多!

另外:我偶然发现了 sqllite studio,它确实使创建数据库和表变得非常容易,但我可能会缺少一些 delphi 功能。

希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.