Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2007
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Manejar un Error al desconectarse MYSQL

Tengo una aplicacion en delphi 6 y utilizo componentes ZEOS...

Tengo un ZConnection, con el cual me conecto a una BD en MYSQL, el problema es que el programa lo tengo en dos maquinas, siendo una de estas la que contiene la BD (funcionando como servidor). Ahora, cuando el Servidor se Apaga o se reinicia o se detiene el servicio MYSQL, el programa de la segunda maquina se bloquea.....

No se como ni donde detectar que el servicio de MYSQL se ha detenido, ya sea por que se apago la maquina servidor o por otra cosa.

Intente aplicarlo en el Evento AfterDisconnect del ZConnection pero nunca entra a esta parte..... y cuando quiero alterar la base de datos cuando el servicio MYSQL esta parado me manda el error 'MySQL has gone away'

Alguna manera para tratar este tipo de errores????
Responder Con Cita
  #2  
Antiguo 16-09-2007
Avatar de Crashthebig
Crashthebig Crashthebig is offline
Miembro
 
Registrado: oct 2006
Ubicación: Republica Dominicana
Posts: 59
Poder: 18
Crashthebig Va por buen camino
Thumbs up

si el servicio se detiene lo puedes reactivar dirigiendote a
panel de control > herramientas administrativas > servicios
te aparecera una lista de todos los servicios que se ejecutan en tu maquina buscas el de mysql y lo reinicias, todo estara listo.

aunque esta es una forma de resolver el problema el servicio no deberia detenerse porque el equipo se apague, te recomiendo que reinstales de nuevo
mysql y que revises bien los parametros durante el proceso de instalacion
__________________
Marcos: Delphi programmer
Desde Republica Dominicana Pa'l mundo entero
http://webhacker.webcindario.com
Responder Con Cita
  #3  
Antiguo 16-09-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Perdona si me equivoco pero a mi me parece que se puede controlar con una Exception, al momento de conectarse, si bien se desconecta, salta la misma Exception, esto en el datamodule.
No me acuerdo muy bien de zeos, lo vi de pasada y me parece un componente muy bueno.
Normalmente cuando un programa se cuelga, envía un aviso, es raro que se Bloquee, seria interesante saber donde haces la conexión.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 16-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
apoyo lo que dice caral, explicanos un poco mas el codigo de tu conexion porq si se desconecta la bd se debe lanzar el ondisconect
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 18-09-2007
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Gracias por la respuesta... y ofresco una disculpa por responder tan tarde...

Ahi va mi explicacion mas detallada...

Tengo un DataModule y en éste tengo ZTable y ZConnection. En el evento OnCreate del DataModule activo la conexion pongo
Código Delphi [-]
Zconnection.Active = True
y la conexion se realiza con exito.

Pero el problema surge cuando una vez conectado con MySQL, se interrumpe el servicio MySQL, y es aqui donde se deberia lanzar el evento OnAfterDisconnect del ZConnection, pero nunca entra a esta parte del codigo.

Por lo tanto, cuando intento hacer alguna operacion despues de que se haya desconectado, el programa se cuelga.....

estoy intentando en el evento OnAfterDisconnect del componente ZConnection pero al nunca entra a esta perte del codigo.

esto es lo que tengo en el OnAfterDisconect (pero repito.... nunca se lanza este evento)
Código Delphi [-]
procedure TdmDatos.zconnLaboratorioAfterDisconnect(Sender: TObject);
begin
   try
     zconnLaboratorio.Connected := True;
   except
     on Error do
        Mensaje de que no se puede establecer conexion
        Cerrar Programa
   end;
end;

El problema no es cuando me quiero conectar, si no una vez conectado el servicio de MySQL se termina (ya sea por apagar la maquina que esta como servidor, o si directamente terminas el servicio desde Panel deControl -> Herramientas Administrativas -> Servicios.

Espero que esta explicaion sirva un poquito mas....

y gracias otra vez.....
Responder Con Cita
  #6  
Antiguo 18-09-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Si hombre a mi me pasa lo mismo, la aplicacion me tira un error diciendo que la coneccion al servicio mysql no existe, y la unica forma es cerrando y volver abrir la aplicacion. tiene que haber una solucion...

Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #7  
Antiguo 18-09-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Ya tienes resuelto tu problema...ahi te va:

OnDisconnect y demás eventos de ZConnection solo se activan cuando en el programa se invoca alguno de sus métodos por lo que no es capaz de detectar cuando la conexión se ha caido. De hecho ZConnection lo unico que hace cuando se conecta es registrarse en el servidor y tener el canal listo para transmitir o recibir datos pero esto solo sucede cuando haces un select, insert o demás hacia el servidor. Si en un momento dado no haces nada en tu programa, ZCon "se duerme" y obviamente no se entera de que pasa con el servidor.

Una vez sabido esto es obvio que al lazar cualquier select u otro comando, no hay garantía de que la conexión aun este levantada, por lo tanto es aqui donde entran los try except

tu código:
Código Delphi [-]
  try
     zconnLaboratorio.Connected := True;
   except
     on Error do
        Mensaje de que no se puede establecer conexion
        Cerrar Programa
   end;
es útil al momento en que arrancas tu programa para verificar si hay conexión, lo puedes poner en el onshow u oncreate de tu ventana principal.

Ahora bien, verificando antes de cualquier select:

Código Delphi [-]
  Try
    TZQuery.Open;
    // Todo lo que se debería hacer cuando si hay conexion y que no queremos que falle
    //
    //
  except
    ShowMessage('Ya no hay conexión con el servidor');
  end;

Obviamente hay que meterle un poco de trabajo fino al except porque asi como te lo puse capturaria cualquier error en el Open, incluyendo errores de sintaxis en el SQL, por lo que hay que usar un objeto Exception para acceder al código de error que le corresponda, de todos modos como está te funciona. Asi tu programa ya no se cae, simplemente, no hace nada o te indica que no puede hacer nada, pero no se cae.

Explicación burda, pero válida.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 19-09-2007
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Gracias......

En efecto..... ya revise.... y como yo lo tenia o trataba de hacer era :

Código Delphi [-]
 if (ZConnection.Connected = False) then
 begin
   Mensaje('No hay conexion');
   Cerrar_Programa
 end;

pero siempre me detectaba esa propiedad en TRUE, aunque no estuviera conectada.....

Lo que hice, en base a la ultima respuesta de AcidRain, fue por medio de una consulta (sin sentido o una simple) para detectar si hay conexion :


Código Delphi [-]
 try 
   ZQuery.SQL.Text := 'SHOW TABLES'; 
   ZQuery.Open;
 except
   Mostrar mensaje de error;
   Cerrar la aplicacion;
 end;


Pues muchas gracias ......

Salu2!!!!!!!!
Responder Con Cita
  #9  
Antiguo 19-09-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Como lo hiciste es lo correcto pero más que estar checando si hay o no conexión antes de cada query, debes de hacer exactamente el mismo código que pusiste pero encerrando todo lo que quieres hacer cuando si hay conexión. Se oye raro, pero esa es la belleza de lasexcepciones: programar como si todo estuviera saliendo bien y en el codigo del except poner lo necesario para cuando las cosas no salen tan bien.. ysobre todo dejar tu programa funcionando.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error en mysql noshy SQL 1 11-06-2007 11:58:55
Error de EOF con mysql Lonidas Conexión con bases de datos 7 11-10-2006 23:13:25
manejar MySQL desde plataforma Win elcigarra MySQL 2 14-05-2006 07:37:13
Desconectarse de un Servidor Ronny Internet 2 12-04-2005 13:32:10
Error con Mysql? danytorres MySQL 4 25-11-2003 16:23:34


La franja horaria es GMT +2. Ahora son las 20:52:43.


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
Copyright 1996-2007 Club Delphi