gpt4 book ai didi

sqlite - 密码 : failed to reserve an envelope space

转载 作者:行者123 更新时间:2023-12-03 15:58:05 26 4
gpt4 key购买 nike

我正在尝试在 Windows 7(64 位)上运行的 Delphi XE7 应用程序中通过 FireDAC 加密/解密 SQLite 数据库。

代码如下所示:

Procedure TMain.ActionBtnClick(Sender: TObject);
Begin
If ActionBtn.Caption = 'Encrypt' Then
Begin
SetPassword;
FDSQLiteSecurity.SetPassword;
End
Else
FDSQLiteSecurity.RemovePassword;
SetStatus;
End;

Procedure TMain.DBNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
Begin
If OpenDialog.Execute Then
Begin
DBName.Text := OpenDialog.FileName;
SetStatus;
End;
End;

Procedure TMain.FormClose(Sender: TObject; Var Action: TCloseAction);
Var
Reg: TRegistry;
Begin
Reg := TRegistry.Create;
Try
Reg.OpenKey('\SQLiteSecurity', True);
Reg.WriteString('Database', DBName.Text);
Finally
Reg.CloseKey;
Reg.Free;
End;
End;

Procedure TMain.FormShow(Sender: TObject);
Var
Reg: TRegistry;
Begin
DBStatus.Caption := '';
Reg := TRegistry.Create;
Try
Reg.OpenKey('\SQLiteSecurity', True);
If Reg.ValueExists('Database') Then
Begin
DBName.Text := Reg.ReadString('Database');
SetStatus;
End;
Finally
Reg.CloseKey;
Reg.Free;
End;
End;

Procedure TMain.SetPassword;
Var
s: String;
Begin
FDSQLiteSecurity.Database := DBName.Text;
BEK(s);
FDSQLiteSecurity.Password := s;
End;

Procedure TMain.SetStatus;
Begin
DBStatus.Caption := FDSQLiteSecurity.CheckEncryption;
If DBStatus.Caption = '<unencrypted>' Then
ActionBtn.Caption := 'Encrypt'
Else
ActionBtn.Caption := 'Decrypt';
End;

尝试加密时,在“FDSQLiteSecurity.SetPassword;”行处,我收到以下错误消息:

[FireDAC][Phys][SQLite] 错误:密码:无法保留信封空间。

我试图找出此错误消息的含义,但没有成功。有谁知道 SQLite 的错误消息试图告诉我什么?

最佳答案

TFDSQLiteSecurityOptions FireDAC.Phys.SQLite.TFDSQLiteSecurity.Options

您是否设置了选项soSetLargeCache

使用选项属性指定数据库加密选项。

由于当前的 SQLite 加密限制,如果数据库的 Blob 字段的值大小大于 1 个 DB 页,并且数据库不适合该数据库,则 SetPassword/ChangePassword/RemovePassword 调用将会失败 SQLite 缓存。

如果设置了soSetLargeCache,则SetPassword/ChangePassword/RemovePassword会自动将缓存大小设置为大于数据库大小,以将数据库完全装入内存。

如果数据库大小大于可访问的系统内存,则相应的调用失败。

关于sqlite - 密码 : failed to reserve an envelope space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27451160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com