abrir Excel como BD

05/10/2006 - 14:59 por SergioT | Informe spam
Hola

Como se configura un DataAdapter para manejar un libro de excel como una
DB?

Salu2
Sergio T.

Preguntas similare

Leer las respuestas

#1 SoftJaén
05/10/2006 - 15:37 | Informe spam
"SergioT" preguntó:

Como se configura un DataAdapter para manejar un libro de
excel como una DB?



Hola, Sergio:

El objeto DataAdapter se configura de igual manera que si abrieras una base
de Access, asignándole a su constructor un objeto OleDbCommand. Lo que sí
deberás de configurar es la cadena de conexión, para indicar explícitamente
que vas hacer uso del ISAM de Excel.

Inserta en el formulario de inicio un control DataGridView, y copia/pega el
siguiente código, el cual muestra los datos de una hipotética «Hoja1»
existente en tu libro de Excel:

Dim cnn As New OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;'")

Try
Dim sql As String = "SELECT * FROM [Hoja1$]"

Dim cmd As New OleDbCommand(sql, cnn)

Dim da As New OleDbDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Hoja1")

With DataGridView1
.DataSource = ds
.DataMember = "Hoja1"
End With

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

Por supuesto, deberás de importar el espacio de nombres System.Data.OleDb.

Un saludo

Enrique Martínez
[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.
Respuesta Responder a este mensaje
#2 SergioT
05/10/2006 - 17:12 | Informe spam
Hola

Gracias funciona muy bien lo unico que no pude es crear la conexion por el
asistente de conexiones del VS2003 que es el q uso
asi que por primera vez estoy construiçyendo a mano un DataAdapter con todos
sus comandos a mano por que normalmente trabajo dçcon DS tipados creados
por los asistentes del VS. pero tengo un error que no entiendo haber si me
puedes decir que es:

La operación debe usar una consulta actualizable

la cosa es cuando quiero adicionar o modificar los datos a tra vez de un
dataSet, aqui va mi Codigo con el que trato de usar un DA basicamente es
una funcion la que da el proimblema, mi funcion GRabar

Dim cnn As New OleDb.OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\fonos.xls;" & _
"Extended Properties='Excel 8.0;'")


Function Grabar(ByVal sNombre As String, ByVal sDireccion As String,
ByVal sFono As String) As Boolean

Dim r As DataRow
Dim ds As DataSet
'==Configura las consultas
Dim s As String
Dim sU As String
Dim sI As String
Dim sD As String

s = "SELECT * FROM [Fonos$] where Nombre='" & sNombre & "'"
sI = "INSERT INTO [Fonos$](Nombre,Direccion,Telefono) VALUES ('" &
sNombre & "','" & sDireccion & "','" & sFono & "')"
sU = "UPDATE [Fonos$] SET Nombre='" & sNombre & "',Direccion='" &
sDireccion & "',Fono='" & sFono & "' WHERE Nombre='" & sNombre & "'"
sD = "DELETE [Fonos$] WHERE nombre='" & sNombre & "'"

ds = Me.EjecutaSQL(s, "Fono")
If ds.Tables(0).Rows.Count = 0 Then
r = ds.Tables(0).NewRow
Else
r = ds.Tables(0).Rows(0)
End If
r("Nombre") = sNombre
r("Direccion") = sDireccion
r("TeleFono") = sFono

If ds.Tables(0).Rows.Count = 0 Then
ds.Tables(0).Rows.Add(r)
End If

Me.EjecutaSQL(ds, s, sI, sU, sD)

End Function


Function EjecutaSQL(ByVal ds As DataSet, ByVal sSel As String, ByVal
sIns As String, ByVal sUpd As String, ByVal sDel As String) As Boolean

Dim cmbS As New OleDb.OleDbCommand(sSel, cnn)
Dim cmbI As New OleDb.OleDbCommand(sIns, cnn)
Dim cmbU As New OleDb.OleDbCommand(sUpd, cnn)
Dim cmbD As New OleDb.OleDbCommand(sDel, cnn)

Dim da As New OleDb.OleDbDataAdapter

da.SelectCommand = cmbS
da.InsertCommand = cmbI
da.UpdateCommand = cmbU
da.DeleteCommand = cmbD

Try
da.Update(ds, "Fonos") '<=aqui da el error
Catch ex As Exception
Me.lblErrores.Text = ex.Message
End Try

End Function


Function EjecutaSQL(ByVal sSql As String, ByVal sNombreTabla As String)
As DataSet

Dim cmd As New OleDb.OleDbCommand(sSql, cnn)
Dim da As New OleDb.OleDbDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Fonos")

Return ds
End Function

Salu2
Sergio T.


"SoftJaén" escribió en el mensaje
news:%
"SergioT" preguntó:

Como se configura un DataAdapter para manejar un libro de
excel como una DB?



Hola, Sergio:

El objeto DataAdapter se configura de igual manera que si abrieras una
base
de Access, asignándole a su constructor un objeto OleDbCommand. Lo que sí
deberás de configurar es la cadena de conexión, para indicar
explícitamente
que vas hacer uso del ISAM de Excel.

Inserta en el formulario de inicio un control DataGridView, y copia/pega
el
siguiente código, el cual muestra los datos de una hipotética «Hoja1»
existente en tu libro de Excel:

Dim cnn As New OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Libro1.xls;" & _
"Extended Properties='Excel 8.0;'")

Try
Dim sql As String = "SELECT * FROM [Hoja1$]"

Dim cmd As New OleDbCommand(sql, cnn)

Dim da As New OleDbDataAdapter(cmd)

Dim ds As New DataSet

da.Fill(ds, "Hoja1")

With DataGridView1
.DataSource = ds
.DataMember = "Hoja1"
End With

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

Por supuesto, deberás de importar el espacio de nombres System.Data.OleDb.

Un saludo

Enrique Martínez
[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.




Respuesta Responder a este mensaje
#3 SoftJaén
06/10/2006 - 10:44 | Informe spam
"SergioT" escribió:

tengo un error que no entiendo haber si me puedes decir que es:

La operación debe usar una consulta actualizable



Sin ver los datos de la hoja de cálculo, y sin saber la consulta SQL que
deseas ejecutar, así como el orden de ejecución del código fuente que has
expuesto, ignoro el motivo para que obtengas el citado mensaje de excepción.
No obstante, procura que todas las filas de la hoja de cálculo sean únicas,
es decir, que alguna columna actúe como si fuera una "clave primaria".

sD = "DELETE [Fonos$] WHERE nombre='" & sNombre & "'"



Si tu intención es ejecutar consultas SQL de eliminación, mejor es que te
olvides de utilizar el ISAM de Excel, porque éste no permite la eliminación
de registros (filas), ya que es una limitación que tiene el propio ISAM.

Para más información sobre el ISAM de Excel, consulta el siguiente artículo
técnico:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/arti..._excel.htm


Enrique Martínez
[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.
Respuesta Responder a este mensaje
#4 SergioT
06/10/2006 - 17:17 | Informe spam
Hola

En realidad lo que quiero es bien simple, quiero usar el data adapter con
todo su potencial es decir poder insertar, actualizar, borrar (ahora se que
no se puede). En realidad que quiero. Quiero poder manejar una hoja de un
libro de excel como una tabla de access o sql, por lo que me dices eso no es
posible, pero es posible hacer update o insert? si no lo es en realidad este
acceso a las hojas de excel es solo para obtener datos cierto?

Gracias por tu tiempo y por el link lo voy a leer

Salu2
Sergio

"SoftJaén" escribió en el mensaje
news:
"SergioT" escribió:

tengo un error que no entiendo haber si me puedes decir que es:

La operación debe usar una consulta actualizable



Sin ver los datos de la hoja de cálculo, y sin saber la consulta SQL que
deseas ejecutar, así como el orden de ejecución del código fuente que has
expuesto, ignoro el motivo para que obtengas el citado mensaje de
excepción.
No obstante, procura que todas las filas de la hoja de cálculo sean
únicas,
es decir, que alguna columna actúe como si fuera una "clave primaria".

sD = "DELETE [Fonos$] WHERE nombre='" & sNombre & "'"



Si tu intención es ejecutar consultas SQL de eliminación, mejor es que te
olvides de utilizar el ISAM de Excel, porque éste no permite la
eliminación
de registros (filas), ya que es una limitación que tiene el propio ISAM.

Para más información sobre el ISAM de Excel, consulta el siguiente
artículo
técnico:

Trabajar con ADO, DAO y Excel
http://mvp-access.com/softjaen/arti..._excel.htm


Enrique Martínez
[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.



Respuesta Responder a este mensaje
#5 SoftJaén
07/10/2006 - 13:19 | Informe spam
"SergioT" escribió:

pero es posible hacer update o insert?



Mediante el ISAM de Excel, sí es posible actualizar e insertar nuevos
registros. En definitiva, se puede hacer de todo menos eliminar registros.
De nuevo te remito al artículo que tengo escrito sobre el ISAM de Excel, que
aunque los ejemplos que aparecen en el mismo están escritos con código de
Visual Basic clásico, la TEORÍA es la misma: no ha cambiado nada.

Referente a la excepción «La operación debe usar una consulta actualizable»,
me suena a Visual Basic clásico, porque ese error es bien conocido y se
producía con todos los ISAM instalables soportados por el motor Microsoft
Jet. Y el error se producía SÓLO la primera vez que se ejecutaba el proyecto
en el IDE de Visual Basic; en posteriores ejecuciones en el IDE, o si
ejecutabas directamente el archivo ejecutable, ya no se producía el error.

Lo único que te puedo decir es que ignoro por completo lo que estás haciendo
para que en Visual Basic .net obtengas la excepción «La operación debe usar
una consulta actualizable», porque por más pruebas que llevo ya efectuadas,
SOY INCAPAZ de reproducir la excepción que nos comentas.

Por supuesto, doy por hecho que tu hoja de cálculo, o rango de celdas con
nombre o sin nombre, tiene la típica estructura de una tabla: un conjunto de
registros (filas) y campos (columnas), en definitiva, que no tiene
características propias de Excel, como por ejemplo, celdas combinadas.

Enrique Martínez
[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.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida