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
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; 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 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