Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 22-11-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Que tal colegas, finalmente le he dado un giro a todo este tema y lo he resuelto de la siguiente manera, que me resulta transparente para chequear y agregar cambios y practico.

A todo lo planteado anteriormente lo reoslvi, creando una tabla SQLITE con un campo ID (UNTEGER) y STRING (BLOB).
En el ID voy agregando el Nº de version de la base de datos, y en el campo STRING, agrego el string SQL necesario para pasar de la version anterior.

Suponiendo que la version inicial es 1

en la tabla tengo

Código SQL [-]
2  |  ALTER TABLE CLIENTES
       ADD INACTIVO BOOLEAN
       DEFAULT FALSE

A la tabla Sqlite le iré agregando todos los cambios siguientes

Luego en delphi, DESCARGO A ARCHIVO EL SQLITE.DB

Código Delphi [-]
VAR
 ResStream: TResourceStream;

begin
        // guardo dbversion

 ResStream := TResourceStream.Create(HInstance, 'DBVER', RT_RCDATA);
  try
    ResStream.Position := 0;
    ResStream.SaveToFile('DbVer.db');
    finally
    ResStream.Free;
  end;

luego de crear el programa, cargo a un query el archivo sqlite


Hago una consulta para obtener el Nº de version actual y lo guardo en la variable DBVer

y luego ejecuto una funcion que hace todo el chequeo y luego continua la carga del sistema

Código Delphi [-]

Function TDatos.VersionBD : boolean;
var
 MaxVer : integer;

begin

DMVersion.QVersion.Last;   //query que esta en un datamodule de control de version este es el que tiene la tabla SQLITE se abre al iniciar y carga toda la taba
MaxVer := DMVersion.QVersionID.Value;

if DBVer < MaxVer
  then
    begin
     if MessageDlg('Su versión de la Base de Datos es :'+ Inttostr(DbVer)+' y la esperada por el Sistema es : '+InttoStr(MaxVer)+#10#13+
     '¿Desea actulizar la Base de datos antes de continuar?',MtInformation,[mbyes,mbno],0)=mryes
      then
        begin
            while DBVer < MaxVer
            do
               begin  // aqui tengo otro query  conectado a firebird con transaccion update que se encargara de hacer los cambios
               DmVersion.QVersion.Locate('ID',DbVer+1);
                QactDB.Connection.StartTransaction;
                QactDB.SQL.Clear;
                 Try
                   QactDB.SQL.Append(Dmversion.QVersionSTRING.Value);
                   QactDB.OpenOrExecute;
                   QactDB.Close;
                   QactDB.SQL.Clear;
                   QactDB.SQL.Append('update config set version = :v');
                   QactDB.ParamByName('v').AsInteger := DmVersion.QVersionID.Value;
                   QactDB.OpenOrExecute;
                   QactDB.Connection.Commit;
                   DbVer := DmVersion.QVersionID.Value;
                 
                  Except
                   On E: Exception
                    do
                      begin
                        QactDB.Connection.Rollback;     
                        MessageDlg('No se ha podido actualizar a la Version :'+DmVersion.QVersionID.AsString+#10#13+
                        E.Message,mterror,[mbok],0);
                        Break;
                      end;


                 End;
               end;
        end;
    end;
result := true;

De esa forma he resuelto sin tener que parsear textos ni recorrer archivos manualmente

Cada vez que agrego un cambio debo agregar a los recursos del ejecutable la nueva tabla SQLITE con los cambios

Espero sirva de ayuda

Gracias a todos por sus aportes
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
[FireDAC] Desconexión a la Base de Datos MAXIUM Conexión con bases de datos 4 14-06-2021 20:12:59
Filtrar Base de Datos FireDac pokexperto1 Conexión con bases de datos 6 03-10-2015 00:26:07
Controlar Cambios en la Base de Datos afunez2007 MS SQL Server 5 12-07-2013 18:04:12
Chequear integridad base de datos Toni Firebird e Interbase 4 09-01-2013 20:02:34
Como hacer conexión de una base de datos en firebird. Niiña Conexión con bases de datos 5 28-11-2011 22:43:04


La franja horaria es GMT +2. Ahora son las 09:07:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi