Procedimientos para manejar base de datos SQLite con FIREDAC




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;








2 comentarios:

Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...