我在使用 SQLite 作为 Altium 数据库时遇到了同样的困难。当 Altium 打开并创建了与数据库的连接时,无法更新数据库文件。到目前为止,我发现了两种解决方法:
启用预写日志样式数据库日志
默认数据库日志样式 DELETE 会临时创建数据库副本,写入数据库文件,并在验证写入后删除临时副本。
预写日志记录 WAL 将所有更改放在一个临时文件中,同时保留数据库的原始副本。访问数据库的进程解析数据库文件和 WAL 临时文件,并返回反映所有更改的信息。我可以确认在 Altium 中进行数据库刷新时可以看到 Altium 之外的写入。
当检查点操作发生时,存储在 WAL 文件中的写入将写入原始数据库。在进程调用时PRAGMA wal_checkpoint;
或在 WAL Auto Checkpoint 设置指定的许多操作之后。
您可以在DB Browser的 Edit Pragmas 选项卡中启用 WAL 日志模式:
数据库浏览器数据库设置
不过,问题仍然没有解决。Altium 打开时,检查点数据库不起作用。数据库文件仍处于锁定状态,无法更改。
需要注意的是,我们希望在 Git 中备份和维护数据库文件的历史记录(是的,不推荐使用 Git)。在 Git 中不会跟踪对日志文件的写入,在检查点之前不会看到数据库文件中的更改。这意味着我们不能在 Altium 打开时从 Git 推送或拉取。我们可以跟踪数据库和日志文件,但另一个结果是没有数据更改的简单检查点将被 Git 视为更改。
使用替代的 ODBC 驱动程序
我测试了一个来自 devart的替代专有ODBC 驱动程序。当我将 Altium 配置为使用 devart 驱动程序连接到 SQLite 数据库时,无论日志设置如何,DB Browser 在 Altium 打开时写入文件都没有问题。Altium 还可以通过刷新操作查看这些更改。
结论
Christian Werner 的ODBC 驱动程序(从 0.9996 版开始)以 devart 驱动程序没有的方式锁定文件,即使 Atlium 通过驱动程序保持与数据库的连接。在某些情况下,WAL 日志模式可能是一种解决方法。