Leer datos de una tabla DBF en SQL Server
A veces, en procesos de migración de sistema, es necesario importar datos de un antiguo DBF (muy común en entornos Visual Foxpro) a SQL Server. Hay varias formas, una de ellas, es a través de la sentencia OPENROWSET en SQL Server.
Primero es necesario habilitar dos opciones en nuestra instancia de SQL Server, “show advanced options” y “Ad Hoc Distributed Queries”. El siguiente query habilita las opciones.
sp_configure 'show advanced options', 1 reconfigure go exec sp_configure 'Ad Hoc Distributed Queries',1 go reconfigure go
Una vez habilitadas, podemos utilizar OPENROWSET para obtener datos de otras fuentes, en el ejemplo, datos de un archivo DBF.
-- El archivo se encuentra en c:\work\tabla.dbf select * from OPENROWSET ('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2; DATABASE=C:\work\','select * from TABLA.DBF')
Si es necesario insertar estos datos en una tabla específica, solo debemos usar la sentencia insert into, ejemplo.
INSERT INTO tabla select * from OPENROWSET ('MICROSOFT.JET.OLEDB.4.0','dBase IV;HDR=NO;IMEX=2; DATABASE=C:\work\','select CAMPO1,CAMPO2,CAMPO3 from TABLA.DBF')
Hola me genera un eeror de servidor vinculado y clomuna null
aqkguien me puede ayudar necesito migrar datos de tablas .dbf a sql server
Eduardo, recuerda primero habilitar las opciones en el servidor, con algún usuario que tenga permisos (idealmente sa).
Luego de eso, prueba OPENROWSET, fíjate que debes indicar la ruta de la carpeta del archivo en DATABASE y en el query la tabla es el archivo .DBF.
Saludos
hola intente utilizar tu codigo tengo el usuario sa y le puse la ruta y me sale el siguiente mensaje
Msg 7308, Level 16, State 1, Line 1
OLE DB provider ‘MICROSOFT.JET.OLEDB.4.0′ cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
Hola Oliver
Sucede que hay que configurar unos parametros antes, antes de que ejecutar la setencia select que el archivo, debes ejecutar estos querys con algun usuario con permisos privilegiados en la instancia.
Una ves que los ejecutes, luego podrás usar OPENROWSET.
Suerte!!
indistintamente de dichos queries con usuario privilegiado, el problema es persistente:
OLE DB provider ‘MICROSOFT.JET.OLEDB.4.0′ cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
Me sucede lo msmo, aparte al ejecutar las lineas: sp_configure ‘show advanced options’, 1
reconfigure
go
exec sp_configure ‘Ad Hoc Distributed Queries’,1
go
reconfigure
go
me envia un mensaje:
Se ha cambiado la opción de configuración ‘show advanced options’ de 1 a 1. Ejecute la instrucción RECONFIGURE para instalar.
Se ha cambiado la opción de configuración ‘Ad Hoc Distributed Queries’ de 1 a 1. Ejecute la instrucción RECONFIGURE para instalar.
ejecuto esa instruccion y aun no sfunciona
Hola, yo ya ejecute la consulta con el usuario SA y genere la consulta. pero me sale error : Msg 7308, Level 16, State 1, Line 2
OLE DB provider ‘MICROSOFT.JET.OLEDB.4.0′ cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
Hola buenos días, Tengo un problema al querer ejecutar la consulta =/
escribí el código tal como se ve en tu ejemplo pero me aparece el error:
“No se puede procesar el objeto “select *from usuarios.dbf”. El Proveedor OLE DB “Microsoft.JET.OLEDB.4.0″ del servidor vinculado “(null)” indica que el objeto no tiene columnas o el usuario actual no tiene permisos en ese objeto”
instale ya un driver que vi que necesitaria de visual fox pero quiciera saber si puedes ayudarme a resolver este problema.
Muchas gracias de antemano
Realmente no funciona correctamente tu ejemplo. Me puedes ayudar
Me da un error:
El proveedor OLE DB ‘MICROSOFT.JET.OLEDB.4.0′ no puede usarse para consultas distribuidas porque está configurado para ejecutarse en el modo de subprocesamiento controlado simple.
Qué debo instalar o configurar adicional?
encontre la solucion.
a mi me daba el mismo error.
pero en otra pc. lo logre realizar sin ningun problema.
— la solucion es que lo corran con el sa. del sql server.
no con el autentificador del windows.
hagan eso y le funcionara…
atte.
Tu código me funcionó…. CORRECTAMENTE!
Mil gracias.
Hola
Trate de todas las formas pero no resulta, si pudieras enviar o mostrar otras formas te agradeceria
Buenas Tardes, quería saber si resulta necesario enumerar campo por campo del dbf o si solamente diciendo dbf origen tabla destino también se puede? Gracias por tu aporte
No he hecho la prueba, pero debería funcionar si listas todos los campos (select * from …..)
Excelente aporte!!! Sirvio de mucho
Hola estoy tratando de migrar unas tablas y me da el siguiente error de podra tratarse
Mens. 7302, Nivel 16, Estado 1, Línea 1
No se puede crear una instancia del proveedor OLE DB “MICROSOFT.JET.OLEDB.4.0″ para el servidor vinculado “(null)”.
Disculpa, puse otra cosa antes.
Me aparece
Servidor: mensaje 7302, nivel 16, estado 1, línea 1
Cannot create an instance of OLE DB provider “MICROSOFT.JET.OLEDB.4.0″ for linked server “(null)”.
No será necesario agregar el driver antes ????
Por favor me interesa mucho
ES POR LA VERSION DE SQL SERVER,
es por arquitectura tiene que ser de 32bit el sql server