gpt4 book ai didi

sqlite - 如何删除加密设置 - Delphi?

转载 作者:行者123 更新时间:2023-12-01 22:47:46 25 4
gpt4 key购买 nike

我在 Delphi 10.2 中对我的 Sq-lite DB 使用加密,我可以加密数据库并在连接参数中设置密码来访问它 - 很好。当连接参数密码为空时,我可以解密并访问它。很好。

问题是我想使用单个程序来访问数据库,无论它是否加密。如果数据库是 UNEncrypted,但连接参数中有密码,我会收到一条错误消息:数据库“未加密”。尝试将密码设置为空或“即时”删除它,如何及时检测未加密状态以删除密码?

我尝试过:

procedure TDataApp10.ConnectAppError(ASender, AInitiator: TObject;
var AException: Exception);
begin
ConnectApp.Connected:= False;
//handle most likely connect error, DB NOT encryped!
FDSQLITESecurity1.Database:= 'C:\VCDat\VCDataApp.sdb';
FDSQLITESecurity1.Password:= 'MyPW';
FDSQLITESecurity1.RemovePassword; //HANGS MESSAGE HERE!!!
ConnectApp.Params.Password:='';
ConnectApp.Connected:= True; //retry or on demand
end;

挂断消息是 CIPHER:数据库未加密

最佳答案

在具有 Password 时打开未加密的数据库指定参数,您可以这样做:

procedure TForm1.Button1Click(Sender: TObject);
begin
FDConnection.Params.Add('DriverID=SQLite');
FDConnection.Params.Add('Database=C:\MyUnencryptedData.db');
FDConnection.Params.Add('Password=1234');

try
FDConnection.Open;
except
{ if the engine reports unencrypted database, remove the password from connection
parameters and retry to open the connection }
on E: EFDDBEngineException do
if E.FDCode = er_AD_SQLiteDBUnencrypted then
begin
FDConnection.Params.Values['Password'] := '';
FDConnection.Open;
end
else
raise;
end;
...
end;

另一种方法是例如调用CheckEncryption方法并比较其结果(内部发生与上面类似的情况;我只是不喜欢字符串返回,所以我个人更喜欢上面的方法):

procedure TForm1.Button1Click(Sender: TObject);
begin
FDConnection.Params.Add('DriverID=SQLite');
FDConnection.Params.Add('Database=C:\MyUnencryptedData.db');
FDConnection.Params.Add('Password=1234');

FDSQLiteSecurity.Database := 'C:\MyUnencryptedData.db';
FDSQLiteSecurity.Password := '1234';

if FDSQLiteSecurity.CheckEncryption = '<unencrypted>' then
FDConnection.Params.Values['Password'] := '';

FDConnection.Open;
...
end;

关于sqlite - 如何删除加密设置 - Delphi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596650/

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