Fecha y hora actual: Domingo 20 May 2018 20:37
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Evitar la perdida de conexión con bd mysql

Responder al Tema

Índice del Foro > Visual Basic y VBA > Evitar la perdida de conexión con bd mysql

Autor Mensaje
FIORELLA



Registrado: 07 Jun 2010
Mensajes: 5

Mensaje Publicado: Lunes 07 Jun 2010 21:41

Título del mensaje: Evitar la perdida de conexión con bd mysql

Responder citando

Hola Chicos y Chicas...

Buenas Tardes... queria preguntarle respecto a esos problemas que se nos presentan cuando tenemos perdida con la conexión hacia la bd... =X

He realizado una aplicación para una clínica... donde la bd esta montada en un servidor... y mi aplicacion se conecta a dicha bd... la aplicación corre local ... Pero me han informado que en ciertas ocasiones han tenido el error de mysql donde dice que no tienen conexión con la bd... Y la razón es porque desconoce el nombre del servidor donde esta alojado la bd... El error dice algo asi:"Error de Conexión. Desconocido el servidor CVFSERVIDOR"
Porfis alguien tiene alguna sugerencia al respecto?¿


Muchas Gracias por leerme

Saludos y Éxito

Volver arriba
Ver perfil del usuario Enviar mensaje privado
B-Yo
Colaborador


Registrado: 21 May 2010
Mensajes: 254

Mensaje Publicado: Lunes 07 Jun 2010 23:44

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola FIORELLA

Creo que sería interesante que a la hora de preguntar dieras más detalles sobre el sistema que estas usando, como por ejemplo, en que esta hecho tu programa (imagino que en VB6 Gorro ), mostrar el codigo que usas para las conexiones a la BD, versión de MySQL, que operativo tiene el servidor y cualquier otra cosa que pueda ayudar a darte una solución.
Así a voz de pronto, lo primero que te recomendaría analizar es sí el problema verdaderamente tiene que ver con que, por la extraña razon que sea, existen problemas con los nombres de host de la red o ese error es debido a que la red en si tiene cortes, o el servicio de MySQL.
Si es el primer caso, lo que yo haría hasta averiguar que demonios le esta ocurriendo a mi red, sería usar la dirección IP en lugar del nombre del equipo (host) para las conexiones a la base de datos. Se que parecera una locura, pero asugurate de que el servidor tenga una IP (privada) fija y que esta no se asigne por DHCP (No sería la primera vez que lo veo) Ojos .
En el segundo caso caso, ya entrariamos en ver que pasa con esa red y si los cortes son inevitables, ver la estructura de tu aplicación ya que para darte una posible solución necesitaremos conocer tu estructura de trabajo.
En el caso de la tercera, todo es revisar los logs y demas para buscar cual es el motivo por el que MySQL esta fallando.

Espero que al final encontremos una solución a tu problema Guiño

Volver arriba
Ver perfil del usuario Enviar mensaje privado
FIORELLA



Registrado: 07 Jun 2010
Mensajes: 5

Mensaje Publicado: Martes 08 Jun 2010 14:52

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola B-Yo

Ciertamente uso Vb 6.0 y fijate que el error que me genero fue el siguiente:
Error de Conexión MySQL server has gone away

Segun lei es que ese problema se debe a que el tiempo de respuesta del servidor caduca luego de cierto tiempo (8 horas) pero no creo que el tiempo de respuesta sea mayor de 8 horas... porque es una consulta medica... y no duran ese tiempo... Pero no se como solucionarlo... Yo utilizo 3 conexiones... 2 de mysql (datos_compartidos y consultas) y 1 de sql server (sqllabosistema)

Aca te coloco un código que utilizo para una de las conexiones con mysql:

Código:
Sub conectar()
    With cnn
         .ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=XXXXX;PORT=3306;DATABASE=datos_compartidos;Uid=XXXXXX;PWD=XXXXXX;OPTION=3"
        .CursorLocation = adUseClient
        .Open
    End With
    With cmd
        .ActiveConnection = cnn
        .CommandType = adCmdText
    End With
End Sub


El sistema operativo del servidor es Server 2005... Y bueno la red esta funcionando perfectamente... Porque ademas de la aplicación que realice... Está la bd de un sistema administrativo y con eso no hay rollos... Yo tambien espero solucionar el problema...

Gracias por tu atención prestada...

Saludos y Éxitos Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
B-Yo
Colaborador


Registrado: 21 May 2010
Mensajes: 254

Mensaje Publicado: Martes 08 Jun 2010 22:21

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola FIORELLA

Siento que no te voy a poder ayudar, no conozco windows server 2005, cabritos de Microsoft, mira que no avisar... JAJAJA Reir .

Ahora en serio, ciertamente casí casí tu misma te estas contestando:
Cita:
Ciertamente uso Vb 6.0 y fijate que el error que me genero fue el siguiente:
Error de Conexión MySQL server has gone away

Segun lei es que ese problema se debe a que el tiempo de respuesta del servidor caduca luego de cierto tiempo (8 horas)

Cuando un usuario abre una conexión a MySQL lo que hace es iniciar una sesión, la cual tiene un tiempo maximo de inactividad para ser cerrada. Para que me entiendas funciona como por ejemplo este foro, tu te conectas y te logeas, pero si pasas x tiempo sin hacer nada por el foro, la sesión caduca y tienes que volverte a loguear para poder realizar acciones. Pues MySQL funciona de una manera parecida.
Ciertamente ese tiempo por defecto esta configurado a 28800 segundos = 8 horas Gorro . Esto lo puedes consultar de la suigiente manera:
Código:
SHOW VARIABLES LIKE 'wait_timeout';

También puedes cambiar este tiempo con:
Código:
SET SESSION wait_timeout = 120;

Con lo cual establecemos el tiempo de caducidad a dos minutos, es decir, si en menos de 2 minutos no se realiza ninguna consulta al servidor, la sesión caducara.
Ojo, esto solo lo estamos estableciendo a nivel de la conexión activa, no del servidor, si tu inicias una nueva conexion desde la consola mismo y miras el time_out sera de 28800, mientras que en la conexion que hemos modificado sera de 120 Gorro .
Entonces, ¿que puede estar ocurriendo?. Pues varias cosas:


    1. Que abras una conexión en un alguna parte de tu programa y esta no sea utilizada durante 8 horas. Imagina que cargas una conexión en un load de un formulario y no la cierras. El usuario de turno minimiza el programa y no lo usa en 8 horas (No es raro que la gente minimize los programas y se pire a su casa Triste ).
    2. Que el servicio de MySQL se detenga. Aunque luego se vuelva a iniciar, las sesiones se abran perdido Llorón . Puede fallar el servicio o simplemente reiniciar el servidor mientras tu aplicación esta abierta y con una conexión abierta.

La put..da de esto, que al no trabajar con un conector nativo como podrias hacer en .NET Triste , la verdad es que no se entera muy bien de los estados de las conexiones, ya que si intentas un cnn.state siempre te lo va a dar como conectado Ojos .
Como resolverlo:
Pues haber como primer consejo te diria que si no es completamente necesario no dejes conexiones abiertas durante mucho tiempo.
Luego la manera de resolverlo, pues depende de como este desarrollada tu aplicación y el ingenio de cada uno. "Muchos caminos llevan a Roma Ordenador "
La más Facil: Puedes controlar el error con On Error y el numero de error, cierras la conexión y la vuelves a abrir. De esta manera iniciaras una nueva sesión y punto pelota.

Espero que esto te ayude a resolver el problema Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
FIORELLA



Registrado: 07 Jun 2010
Mensajes: 5

Mensaje Publicado: Miércoles 09 Jun 2010 18:59

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola B-Yo

B-Yo escribió:

La put..da de esto, que al no trabajar con un conector nativo como podrias hacer en .NET Triste , la verdad es que no se entera muy bien de los estados de las conexiones, ya que si intentas un cnn.state siempre te lo va a dar como conectado Ojos .


Respecto a este comentario... yo utilizo el conector ODBC 3.51 para poder conectarme con MySQL ... y justamente hago lo que dices que no es seguro... Antes de realizar cualquier inserción, modificación y eliminación consulto si hay conexión a la bd...

Código:

     band = 0
     While band = 0
        If cnnAux.State = 0 Then
           Call conectarAux
           MsgBox "Reconectar."
        Else
           Call Insertar_Premium(...)
           MsgBox "ingreso paciente en premium"
           Call desconectar(cnnAux, cmdAux)
           MsgBox "desconectando de preimumcli"
           band = 1
        End If
     Wend


No se si este bien hacer la pregunta de verificación para determinar si m bd esta conectada o no... =X Me pusistes a dudar...

Una preguntita mas... Como te podras fijar ... yo aca cuando inserto (Call Insertar_Premium (...) , desconecto la bd ... esto lo hago porque cuando el doctor registra un paciente en la bd de clinica ... tambien lo hago en la bd administrativo... entonces abro la conexion de la bd administrativa... verifico si la cedula del paciente esta registrado... si no esta registrado llamo al Insertar_Premium y luego cierro la conexión (Call desconectar (cnnAux,cmdAux) ... cierro la conexion porque no veo necesario tenerla abierto luego de que inserte el paciente... Pero la bendita conexion no cierra... Porque tengo instalado el MySQL Administrador ... y alli puedo observar la conexiones existentes... Y cuando verifico sigue abierta la conexion.... Sabras como cerrarla ?¿

El módulo de desconectar es este:
Código:

Sub desconectar(conexion As ADODB.Connection, comando As ADODB.Command)
    If cnn.State = 1 Then
        conexion.Close
        comando.Cancel
    End If
End Sub


Gracias y espero puedas orientarme mas... Igual agradecida por tus respuestas...

Saludos y Éxitos Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
B-Yo
Colaborador


Registrado: 21 May 2010
Mensajes: 254

Mensaje Publicado: Jueves 10 Jun 2010 08:17

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Cita:
Respecto a este comentario... yo utilizo el conector ODBC 3.51 para poder conectarme con MySQL ... y justamente hago lo que dices que no es seguro... Antes de realizar cualquier inserción, modificación y eliminación consulto si hay conexión a la bd...

Código:
...


No se si este bien hacer la pregunta de verificación para determinar si m bd esta conectada o no... =X Me pusistes a dudar...


Lo de que usas el conector ODBC MyODBC versión 3.51 ya me habia fijado por tu cadena de conexión. Aprovecho para decirte que este va por la versión 5.1.6 que podrias descargar libremente de la web de MySQL (pondria la dirección pero aun no tengo antiguedad suficiente en este foro y no puedo postear url´s Llorón ). Pero eso ya es otro tema, dado que aunque lo actualizases el problema que estamos tratando lo seguirias teniendo.

Lo de realizar la comprobación para ver si la conexión esta abierta, esta bién, es el procedimiento "normal". Ahora eso no significa que lo que te responda sea siempre "verdad" (como te explicaba en el mensaje anterior) Gorro . Sí lo quieres comprobar, es muy facil. Pon un boton que muestre el estado de la conexión.
Código:
Private Sub Command1_Click()
MsgBox "El estado de la conexion es " & cnn.State
End Sub

En el servidor:
Ve a la consola de MSDos y ejecuta:
Código:
net stop mysql

Con esto detendras el servicio de MySQL, si pulsas el boton, veras que sigue devolviendo 1 Ojos . Pero casí que no te va a funcionar ninguna consulta Fumao . Ahora vuelve a iniciarlo:
Código:
net start mysql

Si pulsas el boton el estado sigue siendo uno, pero desde el momento que has parado mysql, si intentas realizar cualquier consulta al servidor la respuesta que obtendras es Error de Conexión MySQL server has gone away Triste
Esta misma prueba la puedes realizar bajando el tiempo del time_out como te explique en el mensaje anterior, esperas los dos minutos, pulsas el boton y te dira que cnn.state = 1, pero si intentas cualquier consulta a la BD veras que el resultado es el mismo.

Código:
... cierro la conexion porque no veo necesario tenerla abierto luego de que inserte el paciente... Pero la bendita conexion no cierra... Porque tengo instalado el MySQL Administrador ... y alli puedo observar la conexiones existentes... Y cuando verifico sigue abierta la conexion.... Sabras como cerrarla ?¿


Estas segura de que las conexiones no cierran?.
Cuando tu haces un cnn.close, en la aplicación si que funciona al instante, pero esto no se refleja en MySQL hasta pasado algun tiempo (pueden ser incluso 3 o 4 minutos). Esto ocurre por usar una conexión atraves de ODBC. Cuando usas este tipo de conector Generico, lo malo es que no estas hablando con la BD directamente. Es como si tu aplicación y la BD hablaran idiomas distintos, entonces el ODBC es el que esta en medio de traductor, la aplicación le dice las cosas a el, el las procesa y se lo dice a la BD y lo mismo a la inversa. Por eso se recomienda que en caso de existir un conector especifico para un SGBD no se use ODBC, ya que se va a perder rendimiento y funcionalidades.
Para ver esto no hay problema en que uses el GUI "MySQL Administrator", aunque también puedes hacerlo con la suiguiente consulta:

Código:
SHOW STATUS LIKE 'Threads_connected';


Esto te devolvera el numero de conexiones abiertas que tienes. Abre el programa y ejecuta, esperas unos minutos y veras si es verdad que la conexión no se cierra, con lo cual si es verdad, hay un error en tu codigo (con cnn.close debe cerrar la conexión sí o sí Gorro )

Otra consulta que puedes despues de que se produzca el error es:

Código:
SHOW STATUS LIKE 'Uptime';
lo que te devolvera el numero de segundos que lleva funcionando el servidor ininterrumpidamente.
Guiño.


Ya me cuentas.

Un saludo Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
WhiteSkull
CoAdmin


Registrado: 20 Mar 2009
Mensajes: 3136
Ubicación: y*width+x

Mensaje Publicado: Jueves 10 Jun 2010 13:12

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola q tal, primero perdonen que me entrometa así y tal, pero es posible de persistir el fallo, que fuera por descuido, o sea que el servidor quedara dormido Risa de tal forma que desaparecería de la red. FIORELLA me imagino que ya has mirado la configuración del administrador de energía?

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
FIORELLA



Registrado: 07 Jun 2010
Mensajes: 5

Mensaje Publicado: Jueves 10 Jun 2010 14:45

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Hola B-YO

Te cuento... antes de que me respondieras cambie el código... Risa tonta
Lo que me dices es cierto... Al momento de cerrar la conexión con la bd desde mi aplicación y refrescar la conexiones en el servidor (de forma inmediata) sigue mostrando la conexión... Así que tome mi celular y puse a correr el cronometro... y mientras refrescaba constantemente la vista de las conexiones.. y paso 00:01:41 (esto haciendolo localmente... porque fue en la madrugada cuando estaba en mi casa... tendria que hacer la prueba conectandolo al servidor en mi trabajo).

Partiendo de lo que me dijistes ayer ... Cuando inicias sesión en el foro luego de pasar un tiempo de inactivadad... Para poder postear hay que reiniciar sesión... Pues pense hacer lo mismo para mi aplicación... Porque veras ... Los médicos muchas veces llegan abren la aplicación ... Se van y dejan abierta la aplicación (lo que implican dos conexiones a la servidor ... y dado que el sistema administrativo tiene un tope de 10 conexiones al mysql... ocurre que en plena facturación cuando iban a procesar se salia y la factura se perdia y era un rollo) ... Entonces imaginate... Los médicos se van... dejan abierta inncesariamente las conexiones ... y pues aplique esta solución...

Primero en el evento mousemove del form coloque esto

Código:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, y As Single)
    If cnn.State = 1 Then
        ultimo_movimiento = Now
    Else
        Call conectar
        Call conectar2
        ultimo_movimiento = Now
        Tiempo = 0
    End If
End Sub


Aquí sencillamente pregunto si esta conectado... De ser afirmativa la pregunta... entonces tomo el tiempo de pc ... y en un control Timer hice lo siguiente...

Código:

Private Sub Timer1_Timer()
Dim HoraActual As Date

On Error GoTo xERROR

        HoraActual = Now
        Tiempo = DateDiff("s", ultimo_movimiento, HoraActual)
        If Tiempo > 30 Then
            Call desconectar(cnn2, cmd2)
            Call desconectar(cnn, cmd)
        End If
   
xERROR:
If Err.Number <> 0 Then
    MsgBox "Error en conexion" & Err.Number & Err.Description, vbCritical, "Información"
    Sonido = 2
    Frm_MsgBox.LblMensaje.Caption = "Error en conexion '" & Err.Description & "' "
    Frm_MsgBox.Show vbModal
    Exit Sub
End If

End Sub


Acá procedo asi: a la variable HoraActual le asignado la hora del sistema (El timer lo ejecuto cada 10 seg) ... a mi variable Tiempo le asigno la resta de los segundos de la variable ultimo_movimiento menos HoraActual ... Y finalmente comparo si los segundos (Tiempo) en este caso 30 seg... si son mayores desconecto...

Entocnes en el evento MouseMove ... ya la conexión estaria cerrada... Entonces llamo a las funciones de conexión ... y inicializo las variables Tiempo y ultimo_movimiento ....

Todo funciona bien localmente... Ahora probare con la conexión apuntando al servidor... Pero fijate que algo que me preocupaba era lo siguiente... Si cuando mandaba a desconectar tardaba 1 minuto y algo... Para conectar no tardaría igual .... Pero como te digo localmente funciona perfect... Se conecto inmediantamente conecta con las bd's ...

Voy hacer las pruebas y te aviso...

Aunque una cosita que se me ocurrio ahorita... supongamos que el médico paso 2 horas en la consulta... o X cantidad de tiempo sin mover el mouse... porque estaba tipeando (asi como yo... que tengo como 15 minutos escribiendo este post) ... en ese caso se cerraría la conexión ... =X ... Que otro evento podria usar... Ademas del MouseMove ... No se si me entiendas... O sea un evento que sepa que la pc no se ha suspendido

Hare las pruebas... Gracias por responderme y estar pendiente...

Besitos y Éxitos Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
WhiteSkull
CoAdmin


Registrado: 20 Mar 2009
Mensajes: 3136
Ubicación: y*width+x

Mensaje Publicado: Jueves 10 Jun 2010 15:34

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

Y q tal un timer, para q cada x intervalo llame a la base de datos para q no se quede dormida.. Guitarra [/b]

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
FIORELLA



Registrado: 07 Jun 2010
Mensajes: 5

Mensaje Publicado: Jueves 10 Jun 2010 16:15

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

WhiteSkull escribió:
Y q tal un timer, para q cada x intervalo llame a la base de datos para q no se quede dormida.. Guitarra [/b]


Hola WhiteSkull

No quiero hacerlo asi ... porque la idea es desconectarme de la bd cuando pase full tiempo sin usar la aplicacion...

Gracias
Saludos y Éxito Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado
B-Yo
Colaborador


Registrado: 21 May 2010
Mensajes: 254

Mensaje Publicado: Viernes 11 Jun 2010 02:33

Título del mensaje: Re: Evitar la perdida de conexión con bd mysql

Responder citando

WhiteSkull escribió:
Hola q tal, primero perdonen que me entrometa así y tal, pero es posible de persistir el fallo, que fuera por descuido, o sea que el servidor quedara dormido Risa de tal forma que desaparecería de la red. FIORELLA me imagino que ya has mirado la configuración del administrador de energía?


Looo queeeee¡¡¡¡ Ojos, por díos aquí no se entromete nadie, el caso es resolver los acertijos Risa y cuantos más seamos mejor. Más piensan tres cabezas que dos Guiño y por el tiempo que llevo "paseando" por este foro me consta que la tuya "esta muy bien amueblada" Ok .

Lo de que el servidor se quede dormido y desaparezca de la red me parece algo muy raro, ya que por lo que dice FIORELLA estamos hablando de un server (ella dice que 2005 pero pa mi que va a ser el 2003, Reir .) , no te enfades FIORELLA es por meter algo de cachondeo. Y imagino que MySQL estara instalado como servicio??, así que no le debirian afertar las aperturas o cierres de sesión. Aunquee por el ultimo comentario que a hecho FIORELLA me da que lo de desaparecer de la red alomejor no va tan desencaminado ... Sol

FIORELLA escribió:
Partiendo de lo que me dijistes ayer ... Cuando inicias sesión en el foro luego de pasar un tiempo de inactivadad... Para poder postear hay que reiniciar sesión... Pues pense hacer lo mismo para mi aplicación... Porque veras ... Los médicos muchas veces llegan abren la aplicación ... Se van y dejan abierta la aplicación (lo que implican dos conexiones a la servidor ... y dado que el sistema administrativo tiene un tope de 10 conexiones al mysql... ocurre que en plena facturación cuando iban a procesar se salia y la factura se perdia y era un rollo)


Umm, en este comentario hay muchas cosas que me desconciertan.

No habiamos quedado que las conexiones se abrian y se cerraban cada vez que ejecutaban una orden... Entonces aunque la aplicación este abierta, no significa que este conectada a la BD. Lo que te explique lo hice para que vieras un poco por encima el funcionamiento y el porque de las cosas.

Cita:
... y dado que el sistema administrativo tiene un tope de 10 conexiones al mysql...

Solo 10 como maximo??. Estas segura Ojos, porque este numero de conexiones tan bajo??, por defecto son 100. Puedes consultarlo con:

Código:
SHOW VARIABLES LIKE 'max_connections';


Pruebalo y me dices.

Cita:
ocurre que en plena facturación cuando iban a procesar se salia y la factura se perdia y era un rollo

A que te refieres con se salia??. Cuando superas el limite de conexiones, lo normal es que el motor de un error donde diga algo como "too many connections, ocurre esto o es que la aplicación se noquea del todo.

Tengo varias preguntas sobre esa red:


    1. ¿Cuantos equipos hay en esa red y tienen conexión con el server?.
    2. Imagino que ademas de los SGDB. ¿El server tiene carpetas compartidas y los puestos cojen datos de estas?
    3. ¿En cuantos equipos se ejecuta tu aplicación?
    4. ¿Tu aplicación, esta instalada en cada equipo o esta compartida en el servidor?
    5. Cuando la plicación da el error que nos ocupa... ¿Como lo resolveis?, Simplemente cerrais y volveis a abrir la aplicación y ya funciona o ¿haceis algo más?
    6. Sexo, edad, estado civil, DNI -- Upss no esta no jajaja Fumao


Se que estoy muy pregunton hoy, pero es que me da que el porque del problema pueda estar en las CAL del server más que en el codigo de tu aplicación o en MySQL Guiño . Te pondria algun enlace de Microsoft sobre este tema para que lo fueras mirando, pero los Jefes aun no me dan correa Llorón ., así qu contestame a esto y seguimos que si no me voy a extender mucho.

Por ultimo un par de apuntes:

Cita:
... Se van y dejan abierta la aplicación (lo que implican dos conexiones a la servidor ...
Imagino que esto es así porque te conectas a dos BD de MySQL. Pero en realidad fijate que no es necesario, ya que basta con que en lugar de abrir dos conexiones hagas uso del SQL 'USE BDxxx' antes de aplicar la siguiente consulta SQL y ya esta, con una unica conexión podras trabajar con las BD´s que quieras, en la cadena de conexion (por evitar errores), quitas el DATABASE=BDxxx y ya esta.

Lo de los Timer y eso no esta mal, pero como ya te he demostrado en este hilo, lo basas en el cnn.state y este no siempre "dice la verdad". Ademas es un poco intentar reinventar la rueda, siendo que en un gran numero de ocasiones la solución que parece más simple, suele ser la acertada Maria y esa ya te la deje caer (ahora te la doy mas mascada). Me explico, sí realmente cerrando y abriendo la conexión se resuelve el problema, una solución facil sería más o menos lo siguiente:

Código:

On Error GoTo CapErr
Pase = 0
...
...
...

CapErr:
If Err.Number = -2147467259 Then
 If cnn.Errors.Item(0).NativeError = 2006 Then
    If Pase > 2 Then
      MsgBox "No se pudo conectar con la BD"
      Exit sub
    End If
  cnn.close
  cnn.open
  cnn.Errors.clear
  Pase = Pase + 1
  Resume
 Else
  ... Error con ODBC pero no el  MySQL server has gone away
 End If
Else
....Otro error No relacionado con ODBC
End If


Creo que no cecesita mucha explicación, pero bueno. Si te fijas siempre que ocurre un error con ODBC el manejador de VB 6 lo identifica con el numero -2147467259, y despues atraves de NativeError, podemos acercarnos más al error real. En el caso que nos ocupa es el numero 2006. Si investigas un poco por la documentación de MySQL en la sección de ODBC, podras encontrar listas con los numeros y descripcion de error atraves de NativeError Super . Con esto ya hemos identificado que exactamente es ese error así que podemos proceder a cerrar la conexión, volverla a abrir y con resume volver a la línea que produjo el error, de manera que el usuario no se de ni cuenta de que ha ocurrido un error Calvo . Como ves tengo la precaución de poner una especie de contador que me permita conocer si ese error a ocurrido muchas veces seguidas, ya que si cerrando y volviendo a abrir la conexión no se solucionara el error, crearia un bucle atascando la aplicación.

Siento no poder contestar más rapido, pero con el curro y demas historias voy hasta arriba. Y como habreis podido observar me gusta detallar mis comentarios Ruborizado , espero no hacerme pesado. Aquí son las 3 y pico de la madrugada y me levanto a las 7:30, pa mi que debo tener sangre en el cafe en vez de cafe en la sangre Fumao .

FIORELLA espero tu contestación y WhiteSkull tus ideas, y cualquier otro que pueda aportar algo, pues lo mismo Ok .

Saludos Sueño

Volver arriba
Ver perfil del usuario Enviar mensaje privado
rjaguin



Registrado: 09 May 2018
Mensajes: 2

Mensaje Publicado: Miércoles 09 May 2018 21:01

Título del mensaje: Evitar la perdida de conexión con bd mysql

Responder citando

Buenas tardes, se que el tema lleva bastante tiempo posteado, pero soy nuevo y actualmente presente este mismo detalle al perder la conexion y tengo mis servidor mysql en un VPS activo las 24 horas, quisiera solucionar este detalle

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 1 Hora

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

AYUDA: COMO RECONECTO VB6 A MYSQL SIN PERDER LA...

rjaguin Visual Basic y VBA 0 Miércoles 09 May 2018 21:27 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Evitar PostBack C# MVC

Javier Insuasti C, C#, Visual C++ 0 Jueves 18 Ene 2018 14:42 Ver último mensaje
El foro no contiene ningún mensaje nuevo

CONEXION JAVA A ANDROID

Toño34r00 Java 3 Domingo 16 Oct 2016 18:41 Ver último mensaje
El foro no contiene ningún mensaje nuevo

perdi la conexion a mi base de datos en postgresql

zendit Otras bases de datos 1 Viernes 30 Sep 2016 21:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

AYUDA. Hacer una consulta de java a mysql, con ...

Larry16 Java 0 Domingo 19 Jun 2016 18:32 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,