Visual Basic Foro

Programación => Bases de Datos => Mensaje iniciado por: E N T E R en Abril 24, 2015, 11:59:31 am

Título: Controlar Error de Conexion BD
Publicado por: E N T E R en Abril 24, 2015, 11:59:31 am
Hola, tengo este codigo para conectar a mi base datos MySQL

Código: (VB) [Seleccionar]
Public cnADO As ADODB.Connection    '// Conexion ADO
Public rsADO As ADODB.Recordset     '// RecordSet ADO

Public Sub ConectarADO()
   
    On Error GoTo ErrorHandler
   
    Set cnADO = New ADODB.Connection    '// Crear la nueva conexion
    Set rsADO = New ADODB.Recordset     '// Crear nuevo recordset
   
    rsADO.CursorLocation = adUseClient  '// Tipo de cursor a utilizar
    cnADO.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=control_hotel; User=root;Password=123987;Option=3;"
    cnADO.Open                          '// Abrir la nueva conexion
           
ErrorHandler:
   
    If Err <> 0 Then
        MsgBox "Error Nº: " & Format(Err.Number, "##,###0") & vbCrLf & vbCrLf & Err.Source & vbCrLf & vbCrLf & Err.Description, vbCritical, "Error"
    End If

End Sub

Public Sub CerrarADO()
   
    If Not cnADO Is Nothing Then
   
    Else
        cnADO.Close            '// Cerrar la conexion
        Set cnADO = Nothing    '// Liberar conexion de la memoria
        Set rsADO = Nothing    '// Liberar recorset de la memoria
    End If
   
End Sub


Y Este para hacer un SELECT

Código: (VB) [Seleccionar]
Sub CARGAR_ARTICULOS()
       
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
                       
        If cnADO.State = False Then
           
            MsgBox "No se puede conectar con el Servidor", vbInformation
           
        Else
           
            StrSQL = "SELECT * FROM articulos"
            rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText

            Do Until rsADO.EOF
                Set Lv = LArticulos.ListItems.Add()
                With rsADO
                    Lv.Text = .Fields("codigo")
                    Lv.SubItems(1) = .Fields("nombre") & ""
                    rsADO.MoveNext
                End With
            Loop
           
        End If
       
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la base de datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
       
End Sub


Ahora el error que quiero controlar es cuando el servidor no esta listo para conectarse que solo me salga un error informando que no se puede conectar y ya nada.

Con este metodo si voy a hacer por ejemplo 4 o 5 consultas me sale 5 veces el error informando que no hay conexion
Título: Re:Controlar Error de Conexion BD
Publicado por: Jeronimo en Abril 24, 2015, 12:08:44 pm
Se me ocurre que así como está, si el servidor no está listo te van a salir dos mensajes de error: uno al intentar abrir la conexión (rutina ConectarADO) y otro al verificar el estado de la conexión (rutina CARGAR_ARTICULOS).
Lo que yo haría es evitar la verificación del estado de la conexión:
Código: (VB) [Seleccionar]
Sub CARGAR_ARTICULOS()
       
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Conectar la Base Datos con ADO
        Call ConectarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
                       
        If cnADO.State = True Then
           
            StrSQL = "SELECT * FROM articulos"
            rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
 
            Do Until rsADO.EOF
                Set Lv = LArticulos.ListItems.Add()
                With rsADO
                    Lv.Text = .Fields("codigo")
                    Lv.SubItems(1) = .Fields("nombre") & ""
                    rsADO.MoveNext
                End With
            Loop
           
        End If
       
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
    '// Cerrar la base de datos y liberar la memoria
        Call CerrarADO
    '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
       
End Sub
No sé por qué te salen 4 o 5 mensajes de error. ¿Estás ejecutando más de una vez la rutina CARGAR_ARTICULOS?

Saludos.

Jerónimo
Título: Re:Controlar Error de Conexion BD
Publicado por: E N T E R en Abril 24, 2015, 02:55:28 pm
Si amigo estoy ejecutando la rutina como 20 veces, tengo un cliente que tiene 5 sucursales y que hasta ahora no le convenci que se haga solo de un servidor, y tengo que hacer la consulta por cada sucursal.

El problema que a veces pasa es que en uno no esta prendido la pc, o no tiene luz, o por a o b motivo no se puede acceder a la bd de tal local.

Lo que pasa si le saco la verificacion de la conex

sale esto:

(http://snag.gy/B1EvE.jpg)
http://snag.gy/B1EvE.jpg

Y si sale eso tiene que finalizar el programa cosa que no quiero que haga
Título: Re:Controlar Error de Conexion BD
Publicado por: YAcosta en Abril 24, 2015, 04:25:16 pm
Ah entonces doc, gestiona ese error, eso es lo que exactamente yo hago. Capturas ese error (3709 o el numero exacto que te salga) y das un mensaje diciendo "No hay conexión a la base de datos" y listo, cierras la ventana pero no sale del programa.

Saludos
Título: Re:Controlar Error de Conexion BD
Publicado por: E N T E R en Abril 24, 2015, 04:36:47 pm
Este es el form
(http://snag.gy/5p8ML.jpg)
http://snag.gy/5p8ML.jpg (http://snag.gy/5p8ML.jpg)

Pasa que no puedo cerrar esta ventana si no se puede conectar a unos de los sucursales, por que hay datos del local en esta ventana o de otra sucursal.
Título: Re:Controlar Error de Conexion BD
Publicado por: YAcosta en Abril 24, 2015, 06:22:51 pm
No hay problema doc, no cierres la ventana.
Conectas
Error: Mensaje de error de no conexion
No error: Muestras datos.
Cierras Conexion
Conectas a la tienda 2
Error: Mensaje de error de no conexion
No error: Muestras datos.
Cierras Conexion
Conectas a la tienda 3
Error: Mensaje de error de no conexion
No error: Muestras datos.
Cierras Conexion

Y listo, no te capto donde tienes la complejidad. Otra foma podria ser que uses mejor 3 conectores. cn1, cn2 y cn3 asi que las consultas siguen en las otras pero al final lo veo igual
Título: Re:Controlar Error de Conexion BD
Publicado por: E N T E R en Abril 25, 2015, 12:23:25 pm
Si amigo eso es justamente como tengo, tengo varias conexiones como esta en la imagen tengo 6 conexiones por cada local

Una conexion es por venta contada, otra por credito cobrados, otra por entregas iniciales. y asi por cada item.

Y si no hay conexión en unos de ellos me aparece 12 mensajes de error de conexion por cada sucursal.
Título: Re:Controlar Error de Conexion BD
Publicado por: Jeronimo en Abril 25, 2015, 01:52:47 pm
¿Y por qué tenés tantas conexiones? ¿No te basta con abrir una (por cada tienda) y hacer las tres consultas en la misma conexión?
Si no, lo que yo haría es lo siguiente:
Intentar abrir cada conexión de la tienda 1. Si va bien, muestro los datos. Si alguna falla, guardo en una variable la información que me permita saber de qué tienda se trata y de qué conexión se trata (venta contado, crédito, etc.).
Hasta ahí no muestro ningún mensaje de error.
Al final de todo voy a tener algunos datos en pantalla (de las conexiones que abrieron) y algunas variables que indiquen errores.
Ahí será cuestión de ir revisando esas variables para mostrar, en un solo mensaje, toda la información de las conexiones que no pudieron ser abiertas.
Sería algo como lo que te comentó Yván, pero en lugar de mostrar un mensaje ante cada conexión infructuosa, guardar ese mensaje en una variable y luego, al final, mostrar todos los mensajes en una sola vez (msgbox o lo que uses).
No sé si fui claro.

Jerónimo
Título: Re:Controlar Error de Conexion BD
Publicado por: YAcosta en Abril 25, 2015, 06:51:23 pm
Afinando mas mi respuesta y siguiendo el espiritu que comenta Jeronimo, te diria que los mensajes lo muestres en un area de tu pantalla tipo log, de esa forma no se cae ni redundamos con tantos mensajes, algo similar al filezilla.

(http://i.snag.gy/joIn8.jpg)
Título: Re:Controlar Error de Conexion BD
Publicado por: aedEric en Abril 25, 2015, 07:42:05 pm
hola amigos saludos desde México buena opcion la que comenta mi amigo YAcosta o tambien podria ocupar el Cartel Notificatorio creado por leandro en lo personal yo es el que ocupo

(http://i60.tinypic.com/307q2jc.jpg)