PROCEDIMIENTOS PARA EL MANEJO DE UNA BASE DE DATOS SQLITE CON FIREDAC REALIZADOS CON RAD STUDIO BERLÍN 10.1
Continuando con la explicación sobre cómo se hizo la app MilSeñales, hoy me toca hablar sobre diferentes procedimientos relacionados con la base de datos SQLITE.
Tenéis que tomar nota que con el driver DBExpress sería muy parecido salvo en lo referente a la encriptación.
Componentes que he usado:
SenalesConnection : TFDConnection
SQLQuery1: TFDQuery
FDTransaction1:TFDTransaction
FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink
FDSqliteBackup1: TFDSqliteBackup1
FDSQLiteValidate1:TFDSQLiteValidate1
FDSQLiteSecurity1:FDSQLiteSecurity1
Aquí tenéis las propiedades del objeto "SenalesConnection" que es donde se hace la conexión con la base de datos llamada "senales.db"
Conectando un objeto FDTransaction con el componente FDConnection os pemitirá utilizar transacciones en vuestras consultas, lo que redundará en una base de datos más estable ante bloqueos, cuelgues de la app o situaciones que puedan comprometer la integridad de la misma, además el utilizar transacciones mejora notablemente el rendimiento de la base de datos, yo he llegado a realizar consultas / inserciones, que sin utilizar transacciones tardaban 2 minutos y con transacciones eran sólo 3 segundos.
PROCEDIMIENTOS:
-Abrir una base de datos
PROCEDURE TForm1.AbrirBD;
var
RutaBD, EstaEncriptada, PasswordBD,RutaBD: STRING;
BEGIN
IF NOT SenalesConnection.connected THEN
BEGIN
PasswordBD := '123456'; // o lo que queráis
RutaBD := 'c:\'+ 'senales.db';
WITH SenalesConnection DO
BEGIN
Close;
WITH Params DO
BEGIN
Clear;
Add('DriverID=SQLite');
Add('Database=' + RutaBD);
Add('SharedCache=True');
Add('LockingMode=Normal');
WITH FDSQLiteSecurity1 DO
BEGIN
Database := RutaBD;
password := PasswordBD;
END;
EstaEncriptada := FDSQLiteSecurity1.CheckEncryption;
IF EstaEncriptada <> 'unencrypted' THEN
BEGIN
Add('Password=' + PasswordBD);
END
ELSE
BEGIN
Add('Password=');
END;
END;
END;
TRY
// Establece la conexion
SenalesConnection.connected := true;
EXCEPT
ON e: EDatabaseError DO
showmessage('Exception raised with message: ' + e.Message);
END;
IF NOT SenalesConnection.connected THEN
showmessage('no se ha activado la BD');
WITH SQLQuery1 DO
BEGIN
Close;
prepared := false;
sql.Clear;
Params.Clear;
END;
END;
END;
-EJECUTAR QUERY DE TIPO " INSERT, UPDATE, DELETE, CREATE TABLE"
IF NOT SenalesConnection.connected THEN
SenalesConnection.connected := true;
SQLQuery1.Close;
SQLQuery1.prepared := false;
SQLQuery1.sql.Clear;
SQLQuery1.Params.Clear;
SQLQuery1.sql.Add(textoSQL);
SenalesConnection.StartTransaction;
TRY
SQLQuery1.ExecSQL;
SenalesConnection.commit;
EXCEPT
ON e: Exception DO
BEGIN
SenalesConnection.rollback;
SQLQuery1.active := false;
showmessage('error en Exec SQL: ' + e.Message);
END;
END;
-EJECUTAR QUERY CON UN SELECT
IF NOT SenalesConnection.connected THEN
SenalesConnection.connected := true;
SQLQuery1.Close;
SQLQuery1.prepared := false;
SQLQuery1.sql.Clear;
SQLQuery1.Params.Clear;
SQLQuery1.sql.Add(textoSQL);
SenalesConnection.StartTransaction;
TRY
SQLQuery1.active := true;
SenalesConnection.commit;
EXCEPT
ON e: Exception DO
BEGIN
SenalesConnection.rollback;
SQLQuery1.active := false;
showmessage('Error en Query: ' + e.Message + '. Texto sql: ' +
textoSQL);
END;
END;
IF SQLQuery1.active THEN
SQLQuery1.first;
- ENCRIPTAR UNA BASE DE DATOS SQLITE
VAR
EstaEncriptada: STRING;
BEGIN
SenalesConnection.connected := False;
EstaEncriptada := FDSQLiteSecurity1.CheckEncryption;
IF EstaEncriptada = 'unencrypted' THEN
BEGIN
FDSQLiteSecurity1.password := 'aes-512':passwordBD;
FDSQLiteSecurity1.SetPassword;
END;
END;
- DESENCRIPTAR UNA BASE DE DATOS SQLITE
SenalesConnection.connected := False;
EstaEncriptada := FDSQLiteSecurity1.CheckEncryption;
IF EstaEncriptada <> 'unencrypted' THEN
BEGIN
FDSQLiteSecurity1.Database := 'c:\senales.db';
FDSQLiteSecurity1.password :='123456';
FDSQLiteSecurity1.RemovePassword;
SenalesConnection.Params.password := '';
END;
- CAMBIAR CLAVE DE UNA BASE DE DATOS SQLITE
SenalesConnection.connected := False;
FDSQLiteSecurity1.Database :='c:\senales.db';
FDSQLiteSecurity1.password := tipoEncrypt + ':' + passwordBD;;
FDSQLiteSecurity1.ToPassword :='aes-512:625252';
FDSQLiteSecurity1.ChangePassword;
- VER ESTADO DE UNA BD SQLITE
SenalesConnection.connected := False;
FDSQLiteSecurity1.Database :='c:\senales.db';
FDSQLiteSecurity1.password := '123456';
LbEstado.Text := FDSQLiteSecurity1.CheckEncryption;
- OPTIMIZAR UNA BD SQLITE
FDSQLiteValidate1.Database :='c:\senales.db';
FDSQLiteValidate1.Sweep;
Excelente...
ResponderEliminarMuchas gracias por compartir
ResponderEliminar