Conexion con SQL interrumpida

16/09/2011 - 12:17 por Oskar Ollacarizqueta Pérez | Informe spam
Hola,
A ver si ha alguno os ha pasado algo así y me podéis dar alguna
solución. Os comento el caso:

Tengo un programa que se va conectando con varios ordenadores
secuencialmente y va recogiendo una serie de datos. Es decir, se
conecta con el primero, recoge los datos, luego con el 2º y así
sucesivamente hasta que finaliza y cuando acaba con todos vuelve a
empezar.

El programa está hecho en VB6 y trabaja contra base de datos de SQL
Server, entonces el programa hace una conexión SQL con el equipo del
que va a hacer la recogida de datos y cuando acaba la cierra y pasa al
siguiente.

Si cuando va a conectarse a un equipo esta apagado, no pasa nada ya
que el programa pasa al siguiente, pero si cuando se ha conectado a un
equipo por lo que sea se apaga o pierde la conexión el programa se me
queda ahí frito y ya no funciona más. El .exe se queda arrancado y no
funciona, tengo que ir al administrador de tareas detenerlo y volverlo
a arrancar.

Se os ocurre alguna forma de poder solucionar esto.

Muchas gracias.

Saludos

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
16/09/2011 - 13:38 | Informe spam
Hola,

Nunca me ha pasado nada parecido a eso.

Los objetos ADODB.Connection tienen la propiedad CommandTimeout, que te
permite especificar el maximo intervalo en segundos que puede transcurrir
entre el inicio de un comando y la recepcion de la respuesta antes de que se
produzca un error de TimeOut. Si dicha propiedad contiene el valor cero, el
error no se produce y el cliente espera indefinidamente. Puedes probar por
ahi.

Otra posibilidad es obtener el recordset de manera sincrónica, y verificar
con un Timer el tiempo que ha transcurrido y el estado de la conexión.


"Oskar Ollacarizqueta Pérez" escribió en el mensaje
news:
Hola,
A ver si ha alguno os ha pasado algo así y me podéis dar alguna
solución. Os comento el caso:

Tengo un programa que se va conectando con varios ordenadores
secuencialmente y va recogiendo una serie de datos. Es decir, se
conecta con el primero, recoge los datos, luego con el 2º y así
sucesivamente hasta que finaliza y cuando acaba con todos vuelve a
empezar.

El programa está hecho en VB6 y trabaja contra base de datos de SQL
Server, entonces el programa hace una conexión SQL con el equipo del
que va a hacer la recogida de datos y cuando acaba la cierra y pasa al
siguiente.

Si cuando va a conectarse a un equipo esta apagado, no pasa nada ya
que el programa pasa al siguiente, pero si cuando se ha conectado a un
equipo por lo que sea se apaga o pierde la conexión el programa se me
queda ahí frito y ya no funciona más. El .exe se queda arrancado y no
funciona, tengo que ir al administrador de tareas detenerlo y volverlo
a arrancar.

Se os ocurre alguna forma de poder solucionar esto.

Muchas gracias.

Saludos
Respuesta Responder a este mensaje
#2 Oskar Ollacarizqueta Pérez
19/09/2011 - 10:41 | Informe spam
Gracias por tu ayuda.

Lo del CommandTimeout, ya lo controlo con un determinado tiempo, pero
no sé si es porque está en medio de una transacción o que, pero cuando
se desconecta porque se ha apagado ese equipo o porque ha perdido la
conexión, se me queda el programa frito y tengo que romperlo y
volverlo a arrancar manualmente.

No sé si tienes alguna otra idea, de todas formas muchas gracias.

Saludos
Respuesta Responder a este mensaje
#3 Leonardo Azpurua
20/09/2011 - 14:06 | Informe spam
Hola,

Nunca he tenido la necesidad de trabajar con ADO en modo asincrónico.

Imaginemos que tenemos un Timer (Timer1) con un intervalo razonable, y luego

Private WithEvents cn As ADODB.Connection
Dim startTime as Single
Dim maxIntervaloSegs As Single
Dim Terminado As Boolean, isOk as Boolean

startTime = Timer
Terminado = False
cn.Execute XXXXX, Options:=adAsyncExecute
While Not Terminado: DoEvents: Wend
If isOk Then
{el proceso termino correctamente}
Else
{no se pudo terminar}
End If

y los siguientes eventos:

Private Sub cn_ExecuteComplete(ByVal RecordsAffected As Long, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset,
_ByVal pConnection As ADODB.Connection)
Terminado = True
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
If startTime + maxIntervaloSegs * 1000 > Timer Then
Terminado = True
isOk = False
End If
End Sub

Por supuesto que no lo he probado, pero esto es lo primero que intentaria.


Salud!


"Oskar Ollacarizqueta Pérez" escribió en el mensaje
news:
Gracias por tu ayuda.

Lo del CommandTimeout, ya lo controlo con un determinado tiempo, pero
no sé si es porque está en medio de una transacción o que, pero cuando
se desconecta porque se ha apagado ese equipo o porque ha perdido la
conexión, se me queda el programa frito y tengo que romperlo y
volverlo a arrancar manualmente.

No sé si tienes alguna otra idea, de todas formas muchas gracias.

Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida