Ver Mensaje Individual
  #2  
Antiguo 21-05-2006
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Reputación: 19
JCarlosas Va por buen camino
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

Última edición por JCarlosas fecha: 21-05-2006 a las 17:15:08.
Responder Con Cita