Conexión ODBC abierta al salir

Tengo mi BBDD en Sybase y yo me conecto a ella mediante ODBC.
Al empezar el proyecto abro mi conexión
"Public con As New ADODB.Connection
con.Open "Data Source=midns", "dba", "sql"
Y cuando acabo mi aplicación la cierro
"con.close"
El problema está en que si ejecuto mi aplicación en vista de diseño con el play, no hay problema, me cierra la conexión, pero si creo un ejecutable y arranco la aplicación desde el ejecutable, al salir no me cierra la conexión, se me queda abierta.
¿Alguien sabe porque? ¿Y cómo hacer para que se cierre?
Respuesta
1
Pues si cierras todos los punteros a la BD y cierras así debería funcionar.
Otra cosa que se me ocurre es que pongas esto en el queryunload:
Controlerror:
msgbox Err.number & "-" & Err.Description
End Sub
Y en la funcion del menu:
Private Sub mnusalir_Click()
On Error goto ErrorMnuSalir
con.Close
Set con = Nothing
End
ErrorMnuSalir:
msgbox Err.number & "-" & Err.Des
End Sub
Puede ser que la aplicacion este "quejandose" y al tener puesyo el Resume Next lo pasas por alto.
Hola de nuevo,
Ya lo siento... pero no hay manera. He cerrado todas las conexiones y recordsets y se me queda colgado el servidor.
Pero ahora viene lo más raro que me he dado cuenta.
Si cierro la aplicación desde la opción salir del menu que me cree, no me deja el servidor colgado, en cambio si lo cierro desde el aspa de la ventana es cuando me si me deja el servidor colgado, y eso que tengo el código de cerrar todo tanto en el unload como en el queryunload.
¿Te dice algo esto nuevo? Gracias
Te resumo todo: Si ejecuto aplicación desde el propio VB cierre como cierre la aplicación me cierra bien.
Si creo un exe de la aplicación y ejecuto desde ahí, si luego cierro desde una opción salir que me he creado en mi menu, me lo cierra bien, el código aquí es:
Private Sub mnusalir_Click()
On Error Resume Next
con.Close
Set con = Nothing
End
End Sub
Pero si cierro desde la cruz que hay en la esquina superior derecha, me deja el servidor colgado. Y para evitar esto puse en el queryunload lo siguiente:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error GoTo controlerror
Dim Response As Long
Response = MsgBox("¿Está seguro de que desea sabandonar la aplicación?", vbOKCancel, "CYBVIN")
Select Case Response
Case vbNo: Cancel = True
Case vbOK
con.Close
Set con = Nothing
End
Case vbCancel: Cancel = True
End Select
Exit Sub
controlerror:
Resume Next
End Sub
Pero no me funciona bien, me la deja colgada.
Gracias.
Pues no se me ocurren más cosas. Si no te corre mucha prisa dame dos o tres días para investigar un poco.
Según dices en el primer post si lo ejecutas desde el Visual Studio te cierra bien, por lo que me da la impresión de que dejas algo cargado en memoria,¿utilizas App.End para salir de la aplicación o descargas el formulario?
También estaría bien que me mandases el código conel que cierras la aplicación, porque así, a ciegas es muy difícil acertar.
Buenas,
Ya he puesto los controles de errores que me has dicho, y nada, cuando cierro de ambas manereas en ninguna me entra en el control de errores.
De acuerdo, espero noticias tuyas.
Gracias por tu interés.
Prueba Set con = nothing, es la mejor forma de matar objetos.
Buenas,
He probado lo que me comentas y sigue dejándome la conexión colgada.
¿Se te ocurre algo más?
Gracias
Puede ser que dejes algún recordset abierto, después de usar cada recordset haz lo mismo que con la conexión:
Set recordset = nothing
A ver si hay suerte con eso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas