Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como creo un instalable? (https://www.clubdelphi.com/foros/showthread.php?t=31885)

miguelml 20-05-2006 17:56:04

Como creo un instalable?
 
Hola, tengo una duda, como puedo crear un fichero instalable? se que el install shield y tal, los puede crear, mi problema es que, el programa que quiero poner en el instalabe, usa una base de datos en mySQL, y no se como se hacer para crear un instalable que tambien me instale lo basico para usar la base de datos que tengo en mysql, y ademas para crear o copiar la base de datos con las tablas y al ser posible con los datos que tengo.

Gracias! Saludos!

JCarlosas 21-05-2006 17:10:15

Hola.
Mira yo para resolver un problema similar lo que he hecho es lo siguiente.
1- Me ha bajado la version en .zip de MySQL 5. O sea la version que no hay que instalar.
2-Dentro del directorio donde radicara mi ejecutable he adicionado un directorio denominado DB (El nombre obviamente es irrelevante.) y dentro de dicho directorio he copiado todo lo que viene con MySQL, o sea ejecutables + BD.
3-Dentro de mi aplicacion intento primero conectarme a MySQL, sino lo logro mando a ejecutar a MySQL, espero unos segundos y vuelvo a intentar conectarme. Si todo esta OK en esta segunda vuelta debe realizar la conexion a MySQL pues ya esta levantado el servidor.


Aqui te envio los codigos que uso para hacer esta parte pues es mucho mas expliativo.
Yo uso ZeosLib para conectarme y
DM.conn Es el componente de conexion a la BD.

Código Delphi [-]
 
 try
  DM.Conn.Connected       := true;
 except  Begin
           DM.Conn.Connected       := false;
        end;
  end;  //try

   if (DM.Conn.Connected = false) and
      ((UpperCase(trim(tsConfig.Values[ServerConst])) = 'LOCALHOST') or
     (trim(tsConfig.Values[ServerConst]) = '127.0.0.1'))
     then Begin  //Si no me pude conectar  y la configuracion es localhost, mando a ejecutar al MySQL;
             //Mando a ejecutar el programa en la forma no visible y que no espere por el final de la ejecucion
            EjecutarPrograma(ExtractFilePath(Application.ExeName) + 'DB\mysql\bin\mysqld-nt.exe', false, false);
            //Me demoro unos 5 segundos despues de levantar MySQL para sincronizacion y vuelvo a mandar a conectarse
            Sleep(5000);
            try
             DM.Conn.Connected       := true;
            except  Begin
                     DM.Conn.Connected := false;
                   end;
            end;  //try
          end;   // if (DM.Conn.Connected = false) and
//Vefifico que se haya podido conectar esta vez. Si tampoco lo logro entonces muestro mensaje de que no me puedo conectar
 if DM.Conn.Connected = false then
                               Begin
                                  Showmessage(msgSinDBConxionVar);
                                  AccionSiNoConectadoABD; //Llamo a esta funcion para que haga lo que se tenga que hacer si no puedo conectarme definitivamente con MySQL
                               End;

El procedimiento que ejecuta el programa es este:

Código Delphi [-]
Function EjecutarPrograma(Programa : String; EsperarPorFinal : Boolean; Visible:Boolean): boolean;
 var
   Resultado : Boolean;
   pi : PROCESS_INFORMATION ;
   si :  STARTUPINFO;
 Begin
   FillChar(si,sizeof(si),0);  //Lleno de 0 la estrucutra
   si.cb := sizeof(si);
   if visible then  si.wShowWindow := SW_SHOWNORMAL
              else  Begin
                     si.wShowWindow := SW_HIDE;
                     //algunos programas son caprichosos y no les basta con la instruccion de arriba para oculatarse
                     //Por tanto lo mando para un lugar donde no se vea
                     si.dwFlags := STARTF_USEPOSITION;
                     si.dwX := 5550;
                     si.dwY := 5550;
                    end;

    Resultado :=CreateProcess( nil,
                               PChar(Programa),
                               nil,
                               nil,
                               false,
                               CREATE_NEW_PROCESS_GROUP,
                               nil,
                               nil,
                               si,
                               pi);
   if (EsperarPorFinal and Resultado) then  WaitForSingleObject(pi.hProcess,INFINITE);
   result := Resultado;
 End;

He realizado copy y pega de un fragmento de uno de mis programas y quizas se me quedo alguna variable por poner, pero supongo que con esto podras resolver.
Por supuesto al installshield le dices que adicione todo esos archivos como si fueran parte de tu programa, no hay que especificarle que es la BD.

Bueno pudiera existir alguna forma mas eficiente, pero al menos esta trabaja.
Saludos y buena suerte.
Juan Carlos


La franja horaria es GMT +2. Ahora son las 11:34:42.

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