none
Conexion a fichero access desde vb.net RRS feed

  • Pregunta

  • Buenas tardes. 

    Os cuento un poco el escenario ya que no he encontrado mucha info de lo que quiero obtener.

    Resulta que tengo una BBDD de access 2003 y dentro de ella tablas vinculadas a fichero dbf, y unas consultas realizadas sobre estas tablas vinculadas.

    Estoy desarrollando una aplicación en vb.net interna que consulte esta base de datos y que obtenga una consulta en concreto, pero al llenar un dataset me arroja un error y no se por donde puede venir....

    El error es el siguiente.

    "ODBC: error al conectar con 'DBF_NumEmpresa'".

    (Las tablas vinculadas son dbf de facturaplus....)

    La conexión a Access la estoy haciendo con Oledb... ¿Es posible que tenga que hacerlo con ODBC??

    Gracias.

    Un saludo de antemano.

    lunes, 23 de enero de 2017 17:30

Respuestas

  • "osmagarci" escribió:

    > Resulta que tengo una BBDD de access 2003 y dentro de ella tablas vinculadas a fichero dbf, ...
    >
    > Estoy desarrollando una aplicación en vb.net interna que consulte esta base de datos y que
    > obtenga una consulta en concreto, pero al llenar un dataset me arroja un error y no se porç
    > donde puede venir....
    >
    > He probado con dos y una de ellas me decia que no tenia el formato correcto al compilar....
    >
    > - Private OdbcConnectionString As String = String.Format("Driver={Microsoft Access Driver
    > (*.mdb)};Dbq=S:\mibasedatos.mdb; Uid='';Pwd='';" -> Esta me da error al compilar. incluso
    > le he quitado el uid y pass.
    >
    > - Private OdbcConnectionString As String = String.Format("dsn=MiDNS;") - >
    > Con esta no da error al compilar pero me da el error mencionado de antes.
    >
    > Me da a mi que que el problema es que en la base de datos tengo tablas vinculadas y la
    > consulta que estoy intentando llamar lleva esas tablas....

    Hola:

    Con independencia que la base de datos de Access tenga o no tablas vinculadas a otro origen de datos diferente, en principio deberías de olvidarte de utilizar una cadena de conexión ODBC para conectarte con la propia base de datos de Access, y utilizar la clásica cadena de conexión OleDb:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click( ... ) Handles Button1.Click
    
            Dim cadenaConexión As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=S:\mibasedatos.mdb"
    
            ' Crear un objeto DataTable
            Dim dt As New DataTable()
    
            ' Establecer una conexión con la base de datos de Access formato 2003
            '
            Using cnn As New OleDbConnection(cadenaConexion)
    
                ' Crear un comando
                Dim cmd As OleDbCommand = cnn.CreateCommand()
                
                ' Seleccionar todos los datos de la tabla correspondiente
                cmd.CommandText = "SELECT * FROM [DBF_NumEmpresa]"
    
                ' Crear un adaptador de datos
                Dim da As New OleDbDataAdapter(cmd)
    
                ' Rellenar el objeto DataTable
                da.Fill(dt)
    
            End Using  ' --> Cerrar y destruir la conexión
    
            ' Mostrar los datos en un control DataGridView
            DataGridView1.DataSource = dt
    
        End Sub
    

    Si la tabla DBF vinculada se encuentra en el mismo directorio que figura en la información de vinculación existente en la propia base de Access 2003, en principio entiendo que no deberías de tener ningún tipo de problema para seleccionar los datos, pero si el archivo DBF se encuentra en otra carpeta diferente, está claro que obtendrás el error apropiado a la hora de rellenar el objeto DataTable. En este supuesto, tendrías que eliminar la tabla vinculada de la base de datos y vincularla de nuevo, para que se guarde la ruta nueva en la base de datos de Access.

    Al estar utilizando el motor de datos Microsoft.Jet.OLEDB.4.0, tendrás que compilar tu aplicación de Visual Basic .NET para que solamente se ejecute EXPLÍCITAMENTE en plataformas de destino x86. Si deseas efectuar una compilación para plataformas x64, entonces tendrás que utilizar en la cadena de conexión el siguiente proveedor de datos:

        Dim cadenaConexión As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\mibasedatos.mdb"

    Ni que decir tiene que dicho proveedor de datos tendrá que estar previamente instalado en el equipo.

    Y si a pesar de las indicaciones efectuadas continuas teniendo algún error, muchos de nosotros, y yo personalmente, te estaría enormemente agradecido que nos indicaras la DESCRIPCIÓN DEL ERROR EXACTO QUE OBTIENES a fin de obtener una solución, si es que hay alguna solución, claro está. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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.

    • Marcado como respuesta osmagarci martes, 24 de enero de 2017 15:41
    martes, 24 de enero de 2017 11:18
    Moderador
  • Otra puntualización.

    Para el que le pase como a mi. Resulta que la base de datos que intento acceder (la mdb) esta en el server de la empresa.. y ay si que tengo los DNS establecidos correctamente... pero la aplicación que estoy desarrollando la estoy creando desde un puesto distinto... por lo tanto si no tengo las mismas dns creadas en los dos sitios nos dará error de conexión...

    Saludos.

    martes, 24 de enero de 2017 16:14

Todas las respuestas

  • GRacias, por contestar.

    He probado con dos y una de ellas me decia que no tenia el formato correcto al compilar....

    - Private OdbcConnectionString As String = String.Format("Driver={Microsoft Access Driver (*.mdb)};Dbq=S:\mibasedatos.mdb;Uid='';Pwd='';" -> Esta me da error al compilar. incluso le he quitado el uid y pass.

    - Private OdbcConnectionString As String = String.Format("dsn=MiDNS;") - > Con esta no da error al compilar pero me da el error mencionado de antes.

    Me da a mi que que el problema es que en la base de datos tengo tablas vinculadas y la consulta que estoy intentando llamar lleva esas tablas....

    martes, 24 de enero de 2017 8:30
  • "osmagarci" escribió:

    > Resulta que tengo una BBDD de access 2003 y dentro de ella tablas vinculadas a fichero dbf, ...
    >
    > Estoy desarrollando una aplicación en vb.net interna que consulte esta base de datos y que
    > obtenga una consulta en concreto, pero al llenar un dataset me arroja un error y no se porç
    > donde puede venir....
    >
    > He probado con dos y una de ellas me decia que no tenia el formato correcto al compilar....
    >
    > - Private OdbcConnectionString As String = String.Format("Driver={Microsoft Access Driver
    > (*.mdb)};Dbq=S:\mibasedatos.mdb; Uid='';Pwd='';" -> Esta me da error al compilar. incluso
    > le he quitado el uid y pass.
    >
    > - Private OdbcConnectionString As String = String.Format("dsn=MiDNS;") - >
    > Con esta no da error al compilar pero me da el error mencionado de antes.
    >
    > Me da a mi que que el problema es que en la base de datos tengo tablas vinculadas y la
    > consulta que estoy intentando llamar lleva esas tablas....

    Hola:

    Con independencia que la base de datos de Access tenga o no tablas vinculadas a otro origen de datos diferente, en principio deberías de olvidarte de utilizar una cadena de conexión ODBC para conectarte con la propia base de datos de Access, y utilizar la clásica cadena de conexión OleDb:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click( ... ) Handles Button1.Click
    
            Dim cadenaConexión As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=S:\mibasedatos.mdb"
    
            ' Crear un objeto DataTable
            Dim dt As New DataTable()
    
            ' Establecer una conexión con la base de datos de Access formato 2003
            '
            Using cnn As New OleDbConnection(cadenaConexion)
    
                ' Crear un comando
                Dim cmd As OleDbCommand = cnn.CreateCommand()
                
                ' Seleccionar todos los datos de la tabla correspondiente
                cmd.CommandText = "SELECT * FROM [DBF_NumEmpresa]"
    
                ' Crear un adaptador de datos
                Dim da As New OleDbDataAdapter(cmd)
    
                ' Rellenar el objeto DataTable
                da.Fill(dt)
    
            End Using  ' --> Cerrar y destruir la conexión
    
            ' Mostrar los datos en un control DataGridView
            DataGridView1.DataSource = dt
    
        End Sub
    

    Si la tabla DBF vinculada se encuentra en el mismo directorio que figura en la información de vinculación existente en la propia base de Access 2003, en principio entiendo que no deberías de tener ningún tipo de problema para seleccionar los datos, pero si el archivo DBF se encuentra en otra carpeta diferente, está claro que obtendrás el error apropiado a la hora de rellenar el objeto DataTable. En este supuesto, tendrías que eliminar la tabla vinculada de la base de datos y vincularla de nuevo, para que se guarde la ruta nueva en la base de datos de Access.

    Al estar utilizando el motor de datos Microsoft.Jet.OLEDB.4.0, tendrás que compilar tu aplicación de Visual Basic .NET para que solamente se ejecute EXPLÍCITAMENTE en plataformas de destino x86. Si deseas efectuar una compilación para plataformas x64, entonces tendrás que utilizar en la cadena de conexión el siguiente proveedor de datos:

        Dim cadenaConexión As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\mibasedatos.mdb"

    Ni que decir tiene que dicho proveedor de datos tendrá que estar previamente instalado en el equipo.

    Y si a pesar de las indicaciones efectuadas continuas teniendo algún error, muchos de nosotros, y yo personalmente, te estaría enormemente agradecido que nos indicaras la DESCRIPCIÓN DEL ERROR EXACTO QUE OBTIENES a fin de obtener una solución, si es que hay alguna solución, claro está. ;-)

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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.

    • Marcado como respuesta osmagarci martes, 24 de enero de 2017 15:41
    martes, 24 de enero de 2017 11:18
    Moderador
  • Gracias por la respuesta, muy aclaratoria la verdad.

    Revisaré las rutas de las tablas vinculadas.... pero me da a mi que ese es el problema. Miraré como lo hago por que la BBDD no esta ubicada en la misma carpeta donde tengo la base de datos....

    La conexión previamente la realicé con OleDB pero al darme ese problema lo intente con ODBC....

    martes, 24 de enero de 2017 11:43
  • "osmagarci" escribió:

    > Revisaré las rutas de las tablas vinculadas.... pero me da a mi que
    > ese es el problema. Miraré como lo hago por que la BBDD no esta
    > ubicada en la misma carpeta donde tengo la base de datos....

    Tanto la base de Access como los archivos DBF pueden estar ubicados en direrente carpetas, pero al estar estos últimos vinculados a la base de Access, en ella se guarda la información de la ruta donde se localizan los archivos DBF. Si has movido de carpeta los propios archivos DBF, está claro que la información guardada en la base de Access no es correcta, de ahí que no me extrañe que obtengas un error, te conectes mediante una cadena de conexión ODBC u OleDb.

    La solución sería eliminar de la base de Access las tablas vinculadas, compactar la base de datos para que se elimine por completo la información, y volverlas a vincular para que la base de datos guarde la nueva ruta donde se localizan los archivos DBF.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    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.



    martes, 24 de enero de 2017 11:54
    Moderador
  • Gracias Enrique, estoy comprobando los enlaces y me he fijado en que tengo algunas tablas vinculadas de manera directa y otras mediante DNS....

    Esto error me da en una consulta de unión en la que tengo varias tablas iguales pero con diferentes tipos de enlace y por eso me da el error... Me toca cambiar todos los enlaces....

    Gracias. Dejare el hilo abierto por si surge algún error mas....

    Saludos!

    martes, 24 de enero de 2017 15:40
  • Otra puntualización.

    Para el que le pase como a mi. Resulta que la base de datos que intento acceder (la mdb) esta en el server de la empresa.. y ay si que tengo los DNS establecidos correctamente... pero la aplicación que estoy desarrollando la estoy creando desde un puesto distinto... por lo tanto si no tengo las mismas dns creadas en los dos sitios nos dará error de conexión...

    Saludos.

    martes, 24 de enero de 2017 16:14