Principales respuestas
Error: El proveedor 'Microsoft.ACE.OLEDB.12.0' no está registrado en el equipo local

Pregunta
-
Buenos días, tengo un problema, estaba trabajando bien con un ambiente Visual Studio 2012 y Office 2010, tengo instalado el Access Database 2010, se me ocurrió la genial idea de migrar el office a 2013, y ahora el ambiente de desarrollo me da el siguiente error: Error: El proveedor 'Microsoft.ACE.OLEDB.12.0' no esta registrado en el equipo local.
Mi ambiente de trabajo es asp.net y el código generado en vb.net.
Dim m_sConn1 As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & directorio & "\" & txtcor.Text & ".xlsx;" & _
"Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;"""Alguna ayuda?
Respuestas
-
hola
>>tenia office 2010 y me funcionaba bien, fue al cambiar a office 2013
podrias probar de volver a 2010
o sino no usar ado.net o las librerias COM de office sino pasar a librerias basadas en open xml como ser
ClosedXML - The easy way to OpenXML
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta Javier - GT viernes, 7 de agosto de 2015 17:49
-
Listo problema solucionado, te dejo la rutina de pasar de Excel a Dataset ya que todo lo que se encuentra es al contrario de Dataset a Excel.
Gracias Leandro por tu apoyo.
Dim wb As XLWorkbook = New XLWorkbook(directorio & "\" & txtcor.Text & ".xlsx")
Dim ws As IXLWorksheet = wb.Worksheet("InventoryNei")
Dim firstRowUsed As Integer = ws.FirstCellUsed().Address.RowNumber
Dim lastRowUsed As Integer = ws.LastCellUsed().Address.RowNumber
Dim lastColumnUsed As Integer = ws.LastColumnUsed().ColumnNumber
Dim i, j As Integer
ds.Clear()
Dim invTable As DataTable = ds.Tables.Add("Inventory")
For i = 1 To lastColumnUsed
invTable.Columns.Add("F" & i, Type.GetType("System.String"))
Next
Dim invRow As DataRow
For i = 2 To lastRowUsed
invRow = ds.Tables("Inventory").NewRow()
For j = 1 To lastColumnUsed
invRow("F" & j) = ws.Cell(i, j).Value
Next
ds.Tables("Inventory").Rows.Add(invRow)
Next
Dim total As Integer = ds.Tables(0).Rows.Count()
- Marcado como respuesta Javier - GT viernes, 7 de agosto de 2015 17:47
Todas las respuestas
-
hola
de casualidad tu pc es de 64bits ? si es asi alli esta el problema
aqui
[ADO.NET] Ms Access y arquitectura 64bit
explico como solucionarlo
----
ademas recuerda que al publicar en el IIS debes habilitarlos 32 bits
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP jueves, 6 de agosto de 2015 19:52
-
Gracias Leandro te comento si es de 64 bits mi PC, en producción no hay problema, el programa trabaja bien, solo es en ambiente de desarrollo que da el error.
- Editado Javier - GT jueves, 6 de agosto de 2015 20:14
-
-
esto que comente aplica a web y desktop
solo que en web debes tener en cuanta el comentario final que realizo sobre el IIS
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
>>por ningún lado observo la referencia al IIS
eso no esta en el articulo, eso lo comente en mi primer respuesta, se ve que no la lieste completa
analiza el segundo link que pongo como imagen,alli es donde cambias en el iis para habilitar los 32bits en un entorno web
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Tienes razón lo estaba buscando en el foro no había abierto el segundo link, te comento eso serviría cuando mi entorno de desarrollo lo pruebo desde un server con IIS, pero el emulador del visual studio no encuentro por donde configurar estas opciones, lo único que me muestra es la pantalla que esta corriendo el emulador del compilador.
-
hola
>>pero el emulador del visual studio no encuentro por donde configurar estas opciones,
desde el VS deberia bastar con cambiar el Platform Target a x86 desde las propeidades de los proyectos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
A ver Leandro, las propiedades de un sitio web son diferentes a las propiedades cuando estas trabajado con un proyecto, en 2012 cuando abro un proyecto si puedo ver esa opción que tu dices, pero cuando abro las propiedades del proyecto web aparecen diferente porque como tu dices esas se configuran a nivel del IIS, pero como el emulador es un depurador propio no tiene forma de configurarse.
-
vuando ingresas a esta opcion
no te deja ingresar a las demas solapas ?
si es asi si ingresas a la de Build o a la de Application no ubicas alli la opcion para cambiar el platform target
-----
sino puedes por ese lado te doy un consejo pasate a una base de datos de verdad y usa Sql Server
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Hola Leandro muy buenos días si lees el post inicial mi problema no es de base de datos con bases de datos trabaja excelente, mi problema es al leer un archivo excel, tenia office 2010 y me funcionaba bien, fue al cambiar a office 2013 que empezo el error, en ambiente de producción no hay inconvenientes solo es en ambiente de desarrollo.
Dim m_sConn1 As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & directorio & "\" & txtcor.Text & ".xlsx;" & _
"Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;"""
Dim conn2 As New OleDbConnection(m_sConn1)
Dim da As New OleDbDataAdapter("Select * From [InventoryNei$]", conn2)
ds.Clear()
Try
da.Fill(ds, "XLData") '--> Error aparece al llenar el Dataset con la nueva version de office.
Catch ex As Exception
lblerror.Visible = True
lblerror.ForeColor = Drawing.Color.Red
'lblerror.Text = "Error: File not vaild, Sheet [InventoryNei] not exist!!!"
lblerror.Text = "Error: " + ex.Message
conn2.Close()
Return
End Try
-
hola
>>tenia office 2010 y me funcionaba bien, fue al cambiar a office 2013
podrias probar de volver a 2010
o sino no usar ado.net o las librerias COM de office sino pasar a librerias basadas en open xml como ser
ClosedXML - The easy way to OpenXML
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Marcado como respuesta Javier - GT viernes, 7 de agosto de 2015 17:49
-
Listo problema solucionado, te dejo la rutina de pasar de Excel a Dataset ya que todo lo que se encuentra es al contrario de Dataset a Excel.
Gracias Leandro por tu apoyo.
Dim wb As XLWorkbook = New XLWorkbook(directorio & "\" & txtcor.Text & ".xlsx")
Dim ws As IXLWorksheet = wb.Worksheet("InventoryNei")
Dim firstRowUsed As Integer = ws.FirstCellUsed().Address.RowNumber
Dim lastRowUsed As Integer = ws.LastCellUsed().Address.RowNumber
Dim lastColumnUsed As Integer = ws.LastColumnUsed().ColumnNumber
Dim i, j As Integer
ds.Clear()
Dim invTable As DataTable = ds.Tables.Add("Inventory")
For i = 1 To lastColumnUsed
invTable.Columns.Add("F" & i, Type.GetType("System.String"))
Next
Dim invRow As DataRow
For i = 2 To lastRowUsed
invRow = ds.Tables("Inventory").NewRow()
For j = 1 To lastColumnUsed
invRow("F" & j) = ws.Cell(i, j).Value
Next
ds.Tables("Inventory").Rows.Add(invRow)
Next
Dim total As Integer = ds.Tables(0).Rows.Count()
- Marcado como respuesta Javier - GT viernes, 7 de agosto de 2015 17:47