Ver Mensaje Individual
  #24  
Antiguo 31-08-2007
Novás Novás is offline
Miembro
 
Registrado: oct 2003
Ubicación: Galicia
Posts: 146
Reputación: 21
Novás Va por buen camino
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;
{ RELLENO LAS CONSULTAS QUE DEBO REALIZAR }
  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))';


{ ME CONECTO CON LA BASE DE DATOS }
  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;
{ RECORRO EL ARRAY DE CONSULTAS Y LAS VOY EJECUTANDO }
  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;
{ MUESTRO UN MENSAJE DE INFORMACIÓN Y TERMINO EL PROGRAMA }
  Animate1.Active:=False;
  ShowMessage('El proceso de actualización de la base de datos ha terminado.');
  Application.Terminate;
end;
__________________
Hay dos cosas infinitas: el Universo y la estupidez humana. http://www.cybertarjetas.net
Responder Con Cita