none
me aparece el erro que mi conexion esta cerrada y no ejecuta la aplicacion RRS feed

  • Pregunta

  • buenos días

    mi pregunta o mejor dicho  mi error es el siguiente: executereader requiere una connection abierta y disponible

    esto me pasa en un equipo que tiene windows 8 la aplicación funciona de maravilla en otro equipo con windows 7 tengo la bd alojada en un disco duro que esta en red de un grupo de trabajo de la oficina, es decir conexión interna del edificio realice la aplicación en vb con una bd de acces la instale en tres maquina de la empresa y en dos de ella funciona perfectamente pero en otra al intentar abrir la aplicación para que el usuario inicie sesión me muestra ese error , e decir pq si me funciona en dos equipos y no funciona en el tercero ? no me explico pq están conectadas igual a la misma red mismo grupo d trabajo y todo , cabe resaltar que la computadora en la q me da el error es del usuario que mas tendrá interacción con el sistema ya que con este generare ciertas ordenes de trabajo..

    necesito SU AYUDA no se ya que hacer.. 

    miércoles, 3 de junio de 2015 12:59

Respuestas

  • "raieduardo" escribió:

    > es para cualquier tipo de plataforma, y la computadora
    > donde da el error es 64 bits

    Si el proyecto de Visual Basic .NET lo has compilado para cualquier tipo de plataforma y el sistema operativo donde tienes problemas es de 64 bits, para que puedas utilizar el proveedor de datos Microsoft.ACE.OLEDB.12.0 tienes que asegurarte bien que en ese equipo se encuentre instalada la versión de 64 bits del Componente redistribuible del motor de base de datos de Microsoft Access 2010, ya que de no estar instalado, indudablemente no vas a poder establecer una conexión con ninguna base de datos de Access utilizando el mencionado proveedor de datos.

    Y si por casualidad ya se encuentra instalado dicho componente redistribuible, entonces no tengo ni la menor idea de lo que puede estar sucediendo para que en UN SÓLO EQUIPO obtengas el mensaje de error ExecuteReader requiere una conexión abierta y disponible, porque si el error lo recibieras en todos los equipos donde se ejecuta tu aplicación, entonces el problema podría encontrarse en el código fuente de tu aplicación, pero parece ser que no es así según describes.

    Si no se encuentran instalados los componentes de 64 bits de Microsoft Access 2010, en realidad el mensaje de error que recibirías sería otro diferente al que estás obteniendo, pero puede ser que no seas consciente de ello debido a los bloques Try ... Catch ... End Try que tengas distribuidos entre el proceso de conexión con la base de datos y la ejecución del método ExecuteReader. Obtienes el mensaje de error ExecuteReader requiere una conexión abierta y disponible porque no existe un objeto OleDbConnection o conexión abierta, y ésta no se encuentra abierta porque puede ser que falte por instalar en ese equipo los componentes necesarios del motor de base de datos Microsoft Access.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    miércoles, 3 de junio de 2015 17:37
    Moderador
  • hola... A parte de lo comentado por Enrique yo lo que personalmente haría es en este punto de tu load()

    Catch ex As Exception
                 MsgBox("error al conectarse", vbExclamation, "ERROR")
             End Try

    grabar en un archivo de log por ejemplo el contenido de ex.InnerException y también no está demás, grabar el ex.StackTrace. Como únicamente muestras un mensaje que dice "Error al conectarse", estas enmascarando el verdadero mensaje de error que tal vez indique mas cosas.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 3 de junio de 2015 19:15

Todas las respuestas

  • ammm.. a la explicacion como que le hace falta el codigo  para poder entender lo básico; no recuerdo ningun error en tiempo de ensamblado que bote un error con esas descripciones y ya probastes con la identificacion de usuario de windows?
    miércoles, 3 de junio de 2015 14:23
  • "raieduardo" escribió:

    > mi error es el siguiente: executereader requiere una connection
    > abierta y disponible
    >
    > esto me pasa en un equipo que tiene windows 8 la aplicación
    > funciona de maravilla en otro equipo con windows 7
    >
    > realice la aplicación en vb con una bd de acces

    Hola:

    Lo que tienes que averiguar es el motivo que hace que en el equipo con Windows 8 no exista una conexión abierta cuando intentas ejecutar el método ExecuteReader de un supuesto objeto OleDbCommand, ya que con los pocos datos que nos has facilitado, va a ser complicado que nosotros te podamos decir dicho motivo.

    ¿Para qué plataformas de destino has compilado tu proyecto de Visual Basic .net? ¿Para plataformas de 32 bits, de 64 bits, o para cualquier tipo de plataforma? ¿El sistema operativo instalado en el equipo con Windows 8 donde falla tu aplicación es de 32 o de 64 bits?

    ¿Qué proveedor de datos estás utilizando en la cadena de conexión con tu base de datos de Access? ¿Qué versión tiene el archivo de base de datos? ¿Access 2000-2003 o Access 2007-2013?

    Como podrás comprobar, tienes primero que aportar la información necesaria y adecuada para que nos podamos hacer una ligera idea de lo que está ocurriendo para que falle el método ExecuteReader en el equipo con Windows 8, porque en principio me da que pensar que ese equipo no reúne los requisitos necesarios para que se pueda ejecutar tu aplicación tan bien como se ejecuta en los equipos con Windows 7. ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 3 de junio de 2015 14:34
    Moderador
  • como así con la identificación ?

    tengo la aplicación de escritorio instalada en dos pc una con windows 7 funciona bn , otra con windows 8.1 y funciona bn también , voy a la tercera con windows 8.1 sl y da el error de conexión es decir nunca hace conexión para abrir la bd , es como q si no encontrara el archivo alojado en la red, probé las opciones de recursos compartidos , archivos y todo eso bn  , esta en el mismo grupo de trabajo, de hecho logro entrar a la carpeta dnd esta la bd  por red y todo bn  ,  pero no logra funcionar una vez q ejecuto la aplicación  pum me sale ese error... 

    están a 64 bits las maquinas la compilación es para ambos, trato de cargar la imagen con el cuadro de error q me muestra al iniciar la aplicación pero no se carga la pagina no me deja si creo q esta dificiul q brinden su ayuda si no le explico mejor lo q sucede 

    • Editado raieduardo miércoles, 3 de junio de 2015 14:55
    miércoles, 3 de junio de 2015 14:38
  • PUEDE que la ultima computadora con windows 8 no tenga permisos para acceder a esa ruta (donde esta la bd) eso es lo que dice Don Enrique y yo opino igual.
    miércoles, 3 de junio de 2015 14:57
  • Hola raieduardo deberías de proporcionar parte de tu código para ver que esta sucediendo cuando invocas una conexión a la base de datos, si usas el archivo de configuración app.conf deberías proporcionarnos la info de ese archivo, aparte un pequeño consejo seria hacer una prueba de conexión con un archivo .UDL para verificar que la conexión es correcta.

    Espero haberte ayudado.

    miércoles, 3 de junio de 2015 15:04
  • "Rolando Salvatierra" escribió:

    > PUEDE que la ultima computadora con windows 8 no tenga permisos
    > para acceder a esa ruta (donde esta la bd) eso es lo que dice
    > Don Enrique y yo opino igual.

    ¡Bueno! Yo que creo que PARA NADA he escrito en mi mensaje que el problema se deba a "temas de permisos", por lo que te estaría enormemente agradecido que no me atribuyas a mí cosas que yo no he escrito. ¿OK? ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    miércoles, 3 de junio de 2015 15:05
    Moderador
  • Imports System.Data.OleDb
    Imports System.Data


    Public Class Iniciar_Sesion
        Dim conec As New OleDbConnection
        Dim comand As New OleDbCommand
        Dim adap As New OleDbDataAdapter
        Dim lec As OleDbDataReader
        Dim consulta As String


        Private Sub Iniciar_Sesion_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Try
                conec.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\WDMYCLOUD\TimeMachineBackup\Orden_de_Servicios1.accdb"

                conec.Open()

            Catch ex As Exception
                MsgBox("error al conectarse", vbExclamation, "ERROR")
            End Try

            Tb_clave_sesion.PasswordChar = "*"
        End Sub

        Private Sub Bt_iniciar_sesion_Click(sender As Object, e As EventArgs) Handles Bt_iniciar_sesion.Click

            consulta = "SELECT *FROM usuario WHERE nombre = '" & Tb_nombre_sesion.Text & "' and Clave= '" & Tb_clave_sesion.Text & "' "
            comand = New OleDbCommand(consulta, conec)
            adap.SelectCommand = comand
            lec = comand.ExecuteReader
            If lec.Read = True Then
                menup.Show()
                Me.Hide()
            Else
                MsgBox("Usuario o Contraseña Incorrecta Verifique sus Datos")
            End If
        End Sub


    End Class

    eso es lo q hago para conectarme pq al iniciar la aplicación me sale que inicie sesión pero el problema sale es que me sale un cuadro con un mensaje con el siguiente error : "error al conectarse esto al darle aceptar abre el formulario y luego ingreso datos y al darle aceptar sale en un mensaje "executereader requiere una connection abierta y disponible

                   
    • Editado raieduardo miércoles, 3 de junio de 2015 15:11
    miércoles, 3 de junio de 2015 15:09
  • Hola raieduardo si almacenas el resultado de la consulta en un datatable y evalúas con un if si es que es las filas son mayor a 0 es por que si existe caso contrario esta mal. Guiate del siguiente ejemplo:

    Private Sub Bt_iniciar_sesion_Click(sender As Object, e As EventArgs) Handles Bt_iniciar_sesion.Click consulta = "SELECT *FROM usuario WHERE nombre = '" & Tb_nombre_sesion.Text & "' and Clave= '" & Tb_clave_sesion.Text & "' " Dim oda As New OleDbDataAdapter(consulta, conec) Dim tbl As New DataTable

    If tbl.Rows.Count <> 0 Then menup.Show() Me.Hide() Else MsgBox("Usuario o Contraseña Incorrecta Verifique sus Datos") End If End Sub

    Espero haberte ayudado.

    miércoles, 3 de junio de 2015 15:19
  • hola aldair

     bueno es q el error q me da no es al momento de iniciar sesión, osea no es al momento de darle al botón,  es antes es como q si la pc no me consiguiera el archivo dnd esta la bd y por eso me muestra el error de "error al conectarse" es en load 

    miércoles, 3 de junio de 2015 15:23
  • "raieduardo" escribió:

    > eso es lo q hago para conectarme pq al iniciar la aplicación me
    > sale que inicie sesión pero el problema sale es que me sale un
    > cuadro con un mensaje con el siguiente error : "error al
    > conectarse esto al darle aceptar abre el formulario y luego
    > ingreso datos y al darle aceptar sale en un mensaje "executereader
    > requiere una connection abierta y disponible

    Vamos a ver si nos ponemos de acuerdo porque de no ser así, yo soy el primero que abandona esta conversación. ;-)

    Yo no te he pedido que me indiques el código fuente que estás ejecutando, porque se supone que éste es correcto. Puede que sea mejorable, pero si en los otros equipos no tienes problemas, entiendo que el código es correcto, por tanto, AHÍ NO ESTÁ EL PROBLEMA.

    >  conec.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;
    >   Data Source=\\WDMYCLOUD\TimeMachineBackup\Orden_de_Servicios1.accdb"

    De todas las preguntas que te he formulado en mi primer mensaje, solamente me has respondido al proveedor de datos que estás utilizando y al formato del archivo de Access, que se comprende es de Access 2007-2013. Pero lo que VERDADERAMENTE NECESITO CONOCER es las respuestas a las restantes preguntas, las cuales te las vuelvo a repetir:

    ¿Para qué plataformas de destino has compilado tu proyecto de Visual Basic .net? ¿Para plataformas de 32 bits, de 64 bits, o para cualquier tipo de plataforma? ¿El sistema operativo instalado en el equipo con Windows 8 donde falla tu aplicación es de 32 o de 64 bits?

    Si estás interesado en que te pueda ayudar, te aconsejaría que, por ahora, te limitaras EXCLUSIVAMENTE a responder a dichas preguntas y dejar de publicar el código fuente que se ejecuta en tu aplicación, porque entiendo que es correcto, ya que de no ser así, digo yo que tendrías problemas en todos los equipos donde se ejecuta tu aplicación. ¿O no lo crees tu así?


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 3 de junio de 2015 15:23
    Moderador
  • si okz es correcto, eso te lo dije en un comentario anterior , es para cualquier tipo de plataforma, y la computadora donde da el error es 64 bits 
    miércoles, 3 de junio de 2015 15:28
  • "raieduardo" escribió:

    > es para cualquier tipo de plataforma, y la computadora
    > donde da el error es 64 bits

    Si el proyecto de Visual Basic .NET lo has compilado para cualquier tipo de plataforma y el sistema operativo donde tienes problemas es de 64 bits, para que puedas utilizar el proveedor de datos Microsoft.ACE.OLEDB.12.0 tienes que asegurarte bien que en ese equipo se encuentre instalada la versión de 64 bits del Componente redistribuible del motor de base de datos de Microsoft Access 2010, ya que de no estar instalado, indudablemente no vas a poder establecer una conexión con ninguna base de datos de Access utilizando el mencionado proveedor de datos.

    Y si por casualidad ya se encuentra instalado dicho componente redistribuible, entonces no tengo ni la menor idea de lo que puede estar sucediendo para que en UN SÓLO EQUIPO obtengas el mensaje de error ExecuteReader requiere una conexión abierta y disponible, porque si el error lo recibieras en todos los equipos donde se ejecuta tu aplicación, entonces el problema podría encontrarse en el código fuente de tu aplicación, pero parece ser que no es así según describes.

    Si no se encuentran instalados los componentes de 64 bits de Microsoft Access 2010, en realidad el mensaje de error que recibirías sería otro diferente al que estás obteniendo, pero puede ser que no seas consciente de ello debido a los bloques Try ... Catch ... End Try que tengas distribuidos entre el proceso de conexión con la base de datos y la ejecución del método ExecuteReader. Obtienes el mensaje de error ExecuteReader requiere una conexión abierta y disponible porque no existe un objeto OleDbConnection o conexión abierta, y ésta no se encuentra abierta porque puede ser que falte por instalar en ese equipo los componentes necesarios del motor de base de datos Microsoft Access.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    miércoles, 3 de junio de 2015 17:37
    Moderador
  • gracias señor enrique

    voy a verificar eso y descargar lo que me recomienda, luego que realice las pruebas y la instalación le informo de como resulto 

    saludos

    miércoles, 3 de junio de 2015 18:41
  • hola... A parte de lo comentado por Enrique yo lo que personalmente haría es en este punto de tu load()

    Catch ex As Exception
                 MsgBox("error al conectarse", vbExclamation, "ERROR")
             End Try

    grabar en un archivo de log por ejemplo el contenido de ex.InnerException y también no está demás, grabar el ex.StackTrace. Como únicamente muestras un mensaje que dice "Error al conectarse", estas enmascarando el verdadero mensaje de error que tal vez indique mas cosas.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 3 de junio de 2015 19:15