none
Importar Tabla de Access 2007 en SQL Server 2008 R2

    Question

  • Hola amigos,

    Tengo una BD en Access 2007 y quiero pasarla a SQL Server 2008 R2.

    He usado el importador de Datos de SQL sin demasiados problemas.

    Pero tengo una tabla en particular que tiene un tipo de campo que en Access se llama 'Datos Adjunto'; en este campo tengo una imagen en cada registro.

    El Importador de Datos me convierte este campo a 'nvarchar(255)' y solo me coloca el nombre de la imagen.

    Hay alguna forma de importar las imagenes?

     

    Saludos,


    Jorge Conil
    Sunday, June 26, 2011 12:17 AM

Answers

  • hola

    imagino estas suando esta utilidad

    Transferring Data from MS Access 2003 to SQL Server 2008

    para importar

    si es asi cuando llegas a este punto imagen

    seleccionas la opcion de Edit Mapping para cambiar el tipo de dato del campo ? por ahi cambiadolo a varbinary tome el archivo de forma corrrecta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Jacky-2009 Tuesday, June 28, 2011 1:15 PM
    Sunday, June 26, 2011 12:47 AM
  • "Jacky-2009" escribió:

    > Tengo una BD en Access 2007 y quiero pasarla a SQL Server 2008 R2.
    >
    > He usado el importador de Datos de SQL sin demasiados problemas.
    >
    > Pero tengo una tabla en particular que tiene un tipo de campo que
    > en Access se llama 'Datos Adjunto'; en este campo tengo una
    > imagen en cada registro.
    >
    > El Importador de Datos me convierte este campo a 'nvarchar(255)'
    > y solo me coloca el nombre de la imagen.
    >

    Hola, Jorge:

    Mientras que el campo de la tabla de Access sea del tipo "Datos adjuntos", me parece a mí que va a ser complicado exportar los datos de ese campo a una tabla de SQL Server. Piensa que ese "tipo de dato", por llamarlo de alguna manera, es propio y exclusivo de las bases de datos Access 2007 o superior, y se crearon para mejorar el tipo de dato Objeto OLE.

    > Hay alguna forma de importar las imagenes?

    Mientras encuentras alguna solución para realizar la exportación de datos de un campo del tipo "Datos aduntos" , yo te voy a proponer la solución que yo utilizaría.

    Lo primero que tienes que hacer es realizar una copia de seguridad de la base de datos de Access 2007, para que la puedas recuperar si la solución no te convence.

    Abre la tabla en cuestión de la base de datos de Access 2007, y añades un nuevo campo llamado "Copia" y le asignas el tipo de dato "Objeto OLE".

    Después crea una nueva Consulta en la base de datos de Access 2007, y ejecuta lo siguiente:

       UPDATE NombreTabla
       SET Copia=CampoDatosAdjuntos

    Como observarás, lo que hace la consulta es copiar los datos existentes en el campo de datos adjuntos al nuevo campo que hemos creado. Una vez ejecutada la consulta de actualización, abre de nuevo la tabla para confirmar que en el campo "Copia" aparecen los valores "Datos binarios largos".

    Ahora, eliminarías de la tabla el campo de datos adjuntos, y renombrarías el campo Copia para que se llame igual que el campo que contenía los datos adjuntos. ¿Me explico?

    Ya estás en condiciones de exportar los datos a la tabla de SQL Server, siempre y cuando en ésta última el tipo de dato de la columna donde se van a guardar las imágenes sea del tipo «Image». Vamos a suponer que así es, y que tanto la tabla de SQL Server tiene la misma estructura de campos que la tabla de Access.

    Para exportar los datos no es necesario que utilices Asistente alguno, porque lo puedes realizar desde tu aplicación de Visual Basic, si es que estás desarrollando una aplicación de Visual Basic .NET, claro está. Simplemente tienes que ejecutar la siguiente consulta T-SQL:

    Imports System.Data.OleDb

            ' Establecemos la conexión con la base de Access 2007.
            '
            Using cnn As New OleDbConnection( _
                "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=C:\Mis documentos\Database1.accdb")

                ' Creamos el comando
                '
                Dim cmd As OleDbCommand = cnn.CreateCommand()

                ' Creamos la consulta SQL de datos añadidos
                '
                cmd.CommandText = _
                    "INSERT INTO [Tabla_SQL_Server] " & _
                    "IN ''[ODBC;Driver={SQL Server Native Client 10.0};" & _
                          "Server=(local);Database=Nombre_Base_Datos;UID=usuario;PWD=contraseña]" & _
                    "SELECT * FROM [Tabla_Access]"

                Try
                    ' Abrimos la conexión
                    cnn.Open()

                    ' Ejecutamos el comando
                    Dim n As Integer = cmd.ExecuteNonQuery()

                    ' Obtenemos los registros afectados
                    MessageBox.Show("Nº de registros exportados: " & CStr(n))

                Catch ex As Exception
                    ' Se ha producido un error
                    MessageBox.Show(ex.Message)

                End Try

            End Using

    Lo que hacemos es insertar todos los registros de la tabla de Access en la tabla de la base de SQL Server residente en el servidor local, utilizando la propia seguridad de Microsoft SQL Server para conectarnos con el servidor a través del driver ODBC de Microsoft SQL Server 2008.

    Y cuando crees nuevas tablas en Access 2007 o superior, deja de utilizar el tipo de dato "Datos adjuntos" si tu intención es exportar dichos datos a otro origen de datos distinto de Access. :-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Sunday, June 26, 2011 10:04 AM
    Moderator

All replies

  • hola

    imagino estas suando esta utilidad

    Transferring Data from MS Access 2003 to SQL Server 2008

    para importar

    si es asi cuando llegas a este punto imagen

    seleccionas la opcion de Edit Mapping para cambiar el tipo de dato del campo ? por ahi cambiadolo a varbinary tome el archivo de forma corrrecta

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Jacky-2009 Tuesday, June 28, 2011 1:15 PM
    Sunday, June 26, 2011 12:47 AM
  • "Jacky-2009" escribió:

    > Tengo una BD en Access 2007 y quiero pasarla a SQL Server 2008 R2.
    >
    > He usado el importador de Datos de SQL sin demasiados problemas.
    >
    > Pero tengo una tabla en particular que tiene un tipo de campo que
    > en Access se llama 'Datos Adjunto'; en este campo tengo una
    > imagen en cada registro.
    >
    > El Importador de Datos me convierte este campo a 'nvarchar(255)'
    > y solo me coloca el nombre de la imagen.
    >

    Hola, Jorge:

    Mientras que el campo de la tabla de Access sea del tipo "Datos adjuntos", me parece a mí que va a ser complicado exportar los datos de ese campo a una tabla de SQL Server. Piensa que ese "tipo de dato", por llamarlo de alguna manera, es propio y exclusivo de las bases de datos Access 2007 o superior, y se crearon para mejorar el tipo de dato Objeto OLE.

    > Hay alguna forma de importar las imagenes?

    Mientras encuentras alguna solución para realizar la exportación de datos de un campo del tipo "Datos aduntos" , yo te voy a proponer la solución que yo utilizaría.

    Lo primero que tienes que hacer es realizar una copia de seguridad de la base de datos de Access 2007, para que la puedas recuperar si la solución no te convence.

    Abre la tabla en cuestión de la base de datos de Access 2007, y añades un nuevo campo llamado "Copia" y le asignas el tipo de dato "Objeto OLE".

    Después crea una nueva Consulta en la base de datos de Access 2007, y ejecuta lo siguiente:

       UPDATE NombreTabla
       SET Copia=CampoDatosAdjuntos

    Como observarás, lo que hace la consulta es copiar los datos existentes en el campo de datos adjuntos al nuevo campo que hemos creado. Una vez ejecutada la consulta de actualización, abre de nuevo la tabla para confirmar que en el campo "Copia" aparecen los valores "Datos binarios largos".

    Ahora, eliminarías de la tabla el campo de datos adjuntos, y renombrarías el campo Copia para que se llame igual que el campo que contenía los datos adjuntos. ¿Me explico?

    Ya estás en condiciones de exportar los datos a la tabla de SQL Server, siempre y cuando en ésta última el tipo de dato de la columna donde se van a guardar las imágenes sea del tipo «Image». Vamos a suponer que así es, y que tanto la tabla de SQL Server tiene la misma estructura de campos que la tabla de Access.

    Para exportar los datos no es necesario que utilices Asistente alguno, porque lo puedes realizar desde tu aplicación de Visual Basic, si es que estás desarrollando una aplicación de Visual Basic .NET, claro está. Simplemente tienes que ejecutar la siguiente consulta T-SQL:

    Imports System.Data.OleDb

            ' Establecemos la conexión con la base de Access 2007.
            '
            Using cnn As New OleDbConnection( _
                "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=C:\Mis documentos\Database1.accdb")

                ' Creamos el comando
                '
                Dim cmd As OleDbCommand = cnn.CreateCommand()

                ' Creamos la consulta SQL de datos añadidos
                '
                cmd.CommandText = _
                    "INSERT INTO [Tabla_SQL_Server] " & _
                    "IN ''[ODBC;Driver={SQL Server Native Client 10.0};" & _
                          "Server=(local);Database=Nombre_Base_Datos;UID=usuario;PWD=contraseña]" & _
                    "SELECT * FROM [Tabla_Access]"

                Try
                    ' Abrimos la conexión
                    cnn.Open()

                    ' Ejecutamos el comando
                    Dim n As Integer = cmd.ExecuteNonQuery()

                    ' Obtenemos los registros afectados
                    MessageBox.Show("Nº de registros exportados: " & CStr(n))

                Catch ex As Exception
                    ' Se ha producido un error
                    MessageBox.Show(ex.Message)

                End Try

            End Using

    Lo que hacemos es insertar todos los registros de la tabla de Access en la tabla de la base de SQL Server residente en el servidor local, utilizando la propia seguridad de Microsoft SQL Server para conectarnos con el servidor a través del driver ODBC de Microsoft SQL Server 2008.

    Y cuando crees nuevas tablas en Access 2007 o superior, deja de utilizar el tipo de dato "Datos adjuntos" si tu intención es exportar dichos datos a otro origen de datos distinto de Access. :-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    Sunday, June 26, 2011 10:04 AM
    Moderator
  • Hola,

    Si bien las dos propuestas funcionan correctamente, en ninguna de las dos pude volver a recuperar las imagenes como tales en la BD de SQL.

    O sea, en ambos casos obtuve la Tabla en SQL con todos los datos, e incluso el campo de la imagen tiene informacion, pero al enlazar este campo a un control PictureBox no muestra ninguna imagen.

     

    Saludos,


    Jorge Conil
    Monday, June 27, 2011 8:15 PM
  • "Jacky-2009" escribió:

    > O sea, en ambos casos obtuve la Tabla en SQL con todos los datos, e incluso el campo
    > de la imagen tiene informacion, pero al enlazar este campo a un control PictureBox no
    > muestra ninguna imagen.

    Jorge, ésta es otra cuestión MUY DISTINTA a tu pregunta inicial, y no tiene nada que ver con transferir los datos desde tu base de Access a SQL Server, por tanto, si las respuestas que te hemos indicado te han sido útiles, lo menos que puedes hacer es marcarlas como satisfactorias.

    Como ignoro el código fuente que estás utilizando para mostrar las imágenes en el control PictureBox, lo único que te puedo decir es que le eches un vistazo al siguiente artículo:

    Cómo leer los archivos contenidos en una base de datos

    Ahí explico cómo grabar un archivo temporal en el disco duro con los datos existentes en un campo Image de una tabla de SQL Server. Una vez que lo hayas grabado en el disco duro, mostrarías la imagen en el control PictureBox ejecutando:

       PictureBox1.Image = Image.FromFile("C:\Temp\Archivo.png")

     


    Enrique Martínez
      [MS MVP - VB]


    Tuesday, June 28, 2011 10:41 AM
    Moderator