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;
if (DM.Conn.Connected = false) and
((UpperCase(trim(tsConfig.Values[ServerConst])) = 'LOCALHOST') or
(trim(tsConfig.Values[ServerConst]) = '127.0.0.1'))
then Begin EjecutarPrograma(ExtractFilePath(Application.ExeName) + 'DB\mysql\bin\mysqld-nt.exe', false, false);
Sleep(5000);
try
DM.Conn.Connected := true;
except Begin
DM.Conn.Connected := false;
end;
end; end; if DM.Conn.Connected = false then
Begin
Showmessage(msgSinDBConxionVar);
AccionSiNoConectadoABD; 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); si.cb := sizeof(si);
if visible then si.wShowWindow := SW_SHOWNORMAL
else Begin
si.wShowWindow := SW_HIDE;
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