积极答复者
Error al Cargar datos con ADO en Visual .net 2005

问题
-
Hola, les pido ayuda con esta porcion de codigo. Lo hice en Visual .net 2005. Tengo un archivo de excel en el que guardo un registro que se llama "Mayoristas". Puedo leerlo sin problemas pero cuando trato de cargar informacion en un campo me da el error:
El Recordset actual no admite actualizaciones. Puede ser una limitación del proveedor o del tipo de bloqueo seleccionado.
Espero puedan ayudarme, se que por defecto el archivo se abre como solo lectura pero no se donde es que se especifica que sea modificable.
Gracias
Ahi va el código:
Dim strquery As String
Dim cn As ADODB.Connection
cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=D:\archivo.xls;" & _
"Extended Properties=Excel 8.0;"
.Open()
End With
strquery = "SELECT * FROM [Hoja1$]"
rs = cn.Execute(strquery)
rs.MoveFirst()
rs.addnew ' AQUI ES DONDE DA EL ERROR
rs.Fields("mayoristas").Value = "prueba"
答案
-
"Diego_2011" escribió:
> Puedo leerlo sin problemas pero cuando trato de cargar
> informacion en un campo me da el error:
>
> El Recordset actual no admite actualizaciones. Puede ser una
> limitación del proveedor o del tipo de bloqueo seleccionado.
>
> rs = cn.Execute(strquery)Porque el tipo de Recordset que has abierto es de SÓLO LECTURA, es decir, el valor de su propiedad LockType es adLockReadOnly.
Para que sea actualizable, tienes que abrir el objeto Recordset de la siguiente manera:
Dim cn As ADODB.Connection = New ADODB.Connection
With cn
.CursorLocation = ADODB.CursorLocationEnum.adUseClient
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=D:\archivo.xls;" & _
"Extended Properties=Excel 8.0;"
.Open()
End WithDim strquery As String = "SELECT * FROM [Hoja1$]"
Dim rs As New ADODB.Recordset
rs.Open(strquery, cn, ADODB.CursorTypeEnum.adOpenStatic, _
ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)rs.MoveFirst()
rs.addnew()
rs.Fields("mayoristas").Value = "prueba"rs.Update()
rs.Close()
cn.Close()rs = Nothing
cn = NothingPero mejor será que utilices los objetos de ADO .NET.
Un saludo
Enrique Martínez
[MS MVP - VB]- 已标记为答案 Diego_2011 2011年7月14日 13:52
全部回复
-
pero porque usas ADODB
porque no usas ADO.NET para conectarte a excel y actualizar
Cómo usar ADO.NET para recuperar y modificar registros en un libro de Excel con Visual Basic .NET
Reading and Writing Excel Spreadsheets Using ADO.NET C# DbProviderFactory
Leer un fichero Excel desde ASP.NET con ADO.NET
Connection strings for Excel 2007
Read Data from Excel using OLEDB in VB.NET 2005
como veras para actualziar podrias ahcer un UPDATE de sql para aplciar la operacion
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
"Diego_2011" escribió:
> Puedo leerlo sin problemas pero cuando trato de cargar
> informacion en un campo me da el error:
>
> El Recordset actual no admite actualizaciones. Puede ser una
> limitación del proveedor o del tipo de bloqueo seleccionado.
>
> rs = cn.Execute(strquery)Porque el tipo de Recordset que has abierto es de SÓLO LECTURA, es decir, el valor de su propiedad LockType es adLockReadOnly.
Para que sea actualizable, tienes que abrir el objeto Recordset de la siguiente manera:
Dim cn As ADODB.Connection = New ADODB.Connection
With cn
.CursorLocation = ADODB.CursorLocationEnum.adUseClient
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=D:\archivo.xls;" & _
"Extended Properties=Excel 8.0;"
.Open()
End WithDim strquery As String = "SELECT * FROM [Hoja1$]"
Dim rs As New ADODB.Recordset
rs.Open(strquery, cn, ADODB.CursorTypeEnum.adOpenStatic, _
ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)rs.MoveFirst()
rs.addnew()
rs.Fields("mayoristas").Value = "prueba"rs.Update()
rs.Close()
cn.Close()rs = Nothing
cn = NothingPero mejor será que utilices los objetos de ADO .NET.
Un saludo
Enrique Martínez
[MS MVP - VB]- 已标记为答案 Diego_2011 2011年7月14日 13:52
-
Me podrías ayudar con este por favor, me genera el mismo error
Dim conn As ADODB.Connection
Dim MiConexion
Dim Rs As ADODB.Recordset
Dim MiBase As String
MiBase = "Produccion.accdb"
Set conn = New ADODB.Connection
MiConexion = Application.ThisWorkbook.Path & Application.PathSeparator & MiBase
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MiConexion
End With
Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseServer
Rs.Open Source:="Permisos", _
ActiveConnection:=conn, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable