No se si es lo mejor pero te diré como lo hago yo. Creo otra aplicación la cual será llamada desde el programa que será actualizado. Desde este último compruebas si existe el programa de actualización para la base de datos, si existe lo ejecutas y tras la ejecución lo borras(para que no se ejecute la próxima vez).
El siguiente código que te pongo es trabajando con una base de datos mysql y con los controles zeos.
Código Delphi
[-]
type
tSQL=record
tabla : string[15];
consulta : string;
end;
{$R *.dfm}
procedure TFrmPrincipal.FormShow(Sender: TObject);
const
NumConsultas=3;
var
i, j : integer;
Nombre : String;
UserName : String;
Fichero : TIniFile;
pc : string;
Correcto : boolean;
consultas : array of tSQL;
begin
Animate1.Active:=True;
SetLength(consultas,NumConsultas);
consultas[0].tabla:='Config';
consultas[0].consulta:='Alter table Config add column PorcentajePVD float';
consultas[1].tabla:='Config';
consultas[1].consulta:='create table Abonos(IdAbono INT AUTO_INCREMENT,Fecha DATE NOT NULL,NumAbono INT NOT NULL,'+
'CierreCaja BOOL DEFAULT 0 NOT NULL,Usuario CHAR(10)NOT NULL,TipoIVA INT NOT NULL DEFAULT 16,'+
'PRIMARY KEY (IdAbono))';
consultas[2].tabla:='Config';
consultas[2].consulta:='create table DetallesAbono(IdDetalleAbono INT AUTO_INCREMENT,RefInterna CHAR(8) NOT NULL,'+
'Descripcion CHAR(50) NOT NULL,Cantidad INT NOT NULL,PrecioVenta FLOAT NOT NULL,'+
'IdAbono INT NOT NULL,PRIMARY KEY(IdDetalleAbono))';
j:=length(Application.ExeName);
j:=j-14;
Nombre:='';
Username:=Application.ExeName;
for i:=1 to j do
Nombre:=Nombre+Username[i];
Fichero:=TIniFile.Create(Nombre+'\Config.ini');
pc:=Fichero.ReadString('CONEXION','Pc','192.168.1.2');
Correcto:=False;
while not Correcto do
begin
try
Conexion.Connected:=False;
Conexion.HostName:=trim(pc);
Conexion.Connected:=True;
Correcto:=True;
except
if MessageDlg('No se encuentra el ordenador central. ¿Desea especificar su ubicación?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
pc:=InputBox('Especifique nombre servidor',
'Introduzca la IP del servidor o su nombre de red'+#13+
'Ejemplos: '+#13+
'192.168.1.2'+#13+
'centralita',
PC);
end
else
begin
Correcto:=True;
Application.Terminate;
end;
end;
end;
for i:=low(consultas) to high(consultas) do
begin
TbTabla.TableName:=consultas[i].tabla;
TbTabla.Active:=True;
CConsulta.SQL.Clear;
CConsulta.SQL.Add(consultas[i].consulta);
try
CConsulta.ExecSQL;
except
end;
TbTabla.Active:=False;
CConsulta.Close;r
end;
Animate1.Active:=False;
ShowMessage('El proceso de actualización de la base de datos ha terminado.');
Application.Terminate;
end;