PDA

Ver la Versión Completa : Capturar error MYSQL


elrodrix
08-07-2013, 15:51:35
Como puedo capturar este error ? (ERROR 2013 de MYSQL) y lanzar un mensaje en DELPHI en vez de que MYSQL tire un este error.

http://i.minus.com/ie0Og4kqk8s8v.png

Utilizo componentes ADO (Adoconnetion, Adostoredproc, datasource).

Mi idea es, en el evento BeforeOpen de cada componente Adostoredproc, capturar ese error (ese error salta cuando apago el router, desconecto el LAN, etc), y enviar un msj en DELPHI.

intenten algo asi

With AdoConnection1 do
begin
if AdoConnection1.State = [stClosed] then
begin
try
AdoConnection1.Connected:=True;
except
on E: Exception do
begin
ShowMessage(E.ClassName + ' Ocurrio un error : ' + E.Message);
end;
end;
//raise Exception.Create('ERROR DE CONEXION DE BASE DE DATOS');
end;
end;

Pero no se trata de preguntar por el estado del AdoConnection (ya que si el componente se conectó a la base de datos correctamente, su STATE sigue siendo CONECTED por mas que apaque el ROUTER/SWITCH o desconecte el LAN).

Entonces mi idea es capturar los posibles errores de perdida de conexion de MYSQL y enviar un mensaje en DELPHI.

Como seria el procedimiento? Gracias y saludos.

Rockin
08-07-2013, 17:11:35
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

elrodrix
08-07-2013, 17:13:07
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

Gracias. Ahora prueba y luego publico los resultados.

elrodrix
08-07-2013, 17:22:14
Prueba a ponerlo en el evento onDisconnect del ADOConnection.

Saludos

Acabo de probar y no paso nada.

A mi parecer, creo que no iria en el evento onDisconnect del ADOConnection, ya que, por ejemplo si desconecto el cable LAN, el ADOConnection no va a interpretar como que se desconecto el cable (a mi parecer, creo).

Para guiarte (quizas sirva):

Mi programa, al ejecutar, hay que hacer click en "conectar a bd", en ese evento mando la cadena de conexion al ADOConnection y pongo TRUE el CONECTED.

Esto quiere decir que a partir de ahi, la propiedad Connected queda en True.

Insisto con mi caso particular, si por ejemplo desconecto el cable LAN o se funde la placa de red, la propiedad Connected del ADOConnection sigue en True. y cuando quiero seguir trabajando, obviamente MYSQL me envia mensajes de error que se perdio la conexion.

Ese me mensaje, en ese caso particular, es el que no logro capturar.

Gracias y saludos.

elrodrix
08-07-2013, 20:47:27
Listo, pude solucionar este pequeño problema, agregando un TApplicationEvents en el Form Principal y con el siguiente codigo en el evento On Exception

//procedimiento para capturar las fallas en la perdida de conexion de la base de datos
//agregar ComObj en uses del FORM
procedure TFMain.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
EO:EOLEException;
begin
if E is EOLEException then
begin
EO:=EOLEException(E);
if EO.ErrorCode = -2147467259 then
//error de conexion (disconnected)
begin
try
try
DM1.ADOConnection1.Close;
except;
end;
DM1.ADOConnection1.Open;
ShowMessage('FALLA EN LA CONEXION A LA BASE DE DATOS - Reestableciendo, vuelva a intentar!');
except
on E:Exception do
ShowMessageFmt('FALLA EN LA CONEXION A LA BASE DE DATOS!. '
+ 'Por favor, intente luego!.'#13'Error message: %s', [E.Message]);
end;
end
else
ShowMessage(E.Message + ' ' + IntToStr(EO.ErrorCode));
end
else
ShowMessage(E.ClassName + #13 + E.Message);
end;

Espero que les sirva. Gracias y Saludos

vroa74
12-07-2013, 03:03:10
A mi me ocurria eso, cuando cambie de componente me dejo de pasar los problemas de conexion, recomnemdacion zoezlib, myDac, Unidac, firedac.