Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado 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
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
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
-
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:
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 SubNo 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
-
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
-
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
-
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.
-
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
-
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.
-
¿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
-
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)
-
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)