为啥我无法从 fireac 打开我的 sqlite 数据库?

Posted

技术标签:

【中文标题】为啥我无法从 fireac 打开我的 sqlite 数据库?【英文标题】:why I can not open my sqlite database from firedac?为什么我无法从 fireac 打开我的 sqlite 数据库? 【发布时间】:2018-04-30 22:42:57 【问题描述】:

我可以使用 sqlite maestro 应用程序打开我的加密 sqlite 数据库,但我无法使用 fiedac 我收到此错误

[FireDAC][Phys][SQLite] 错误:密码:指定的密码无效 或数据库已损坏

这是我的数据模块单元:

object DM: TDM
  OldCreateOrder = False
  Height = 306
  Width = 468
  object FDConnection1: TFDConnection
    Params.Strings = (
      'Database=C:\myapps\mydb.db'
      'Password=mypass'
      'DriverID=SQLite')
    LoginPrompt = False
    Left = 48
    Top = 16
  end

我将加密密钥写为密码,但是当我没有输入任何密码时出现错误:

[FireDAC][Phys][SQLite] 错误:文件已加密或不是数据库。

有什么问题?

【问题讨论】:

您错过了告诉 FireDAC 您使用哪种加密。使用 <encryption>:<password> 格式,例如aes-256:MyPassword 用于 Password 连接参数。为此请咨询connection definition parameters。我不能给你一个直接的答案,因为你没有提到你实际使用的加密。 @Victoria 我这样做时密码无效 那么,您使用的密码无效。但是您必须使用该格式(除非您使用 AES-256),这是我确定的。如果您告诉我们您遵循的确切步骤,我可以在几个小时内尝试在 VM 上使用 SQLite Maestro 试用进行模拟(因为我住的地方是凌晨 1 点 :) @Victoria 这是我在 sqlite maestro 中使用的正确密码。我只删除了fdconnection组件,右键单击并设置上面的参数:数据库名称,密码和驱动程序...慢慢来,我们在同一时区顺便说一句...谢谢 【参考方案1】:

发现问题。根据the documentation:

加密的数据库格式与其他类似的不兼容 SQLite 加密扩展。这意味着您不能使用 加密数据库,使用非 FireDAC 库加密。如果你需要 为此,您必须使用原始工具解密数据库 并使用 FireDAC 对其进行加密。

我无法使用 SQLite Maestro(不同的库)加密并在 FireDAC 中打开它,所以我必须解密它然后使用 FireDAC 加密数据库。我使用了 Delphi 附带的加密示例,现在我可以使用 FireDAC 打开它。

【讨论】:

希望你不会因为我的编辑而用你的新朋克头盔征服我的寺庙 :) 这是正确的答案!请不要忘记接受它.. @Victoria 哈哈,我和你一样是一名士兵。肯定会选择答案,只是在我可以这样做之前有 2 天的强制期限。非常感谢维多利亚,你总是帮助我。 啊,有一些答题接受期。忘记那件事了。对不起。我很高兴我在某个时候有用;不过这次不是:) 你当然做到了。你启发了我去研究文档,你还编辑了我糟糕的写作:) @Victoria plz 用你的 twitter、linkedin 等更新你的个人资料...我想关注你。

以上是关于为啥我无法从 fireac 打开我的 sqlite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3_open - '数据库无法打开'

无法从 iOS 应用程序打开 sqlite DB

无法从单例对象打开SQLite数据库

为啥我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?

SQLite 无法打开数据库文件:Laravel + Windows

SQLite - 无法打开数据库文件