"El recordset actual no admite actualizaciones"!!

Iniciado por cobreti09, 23 Abril 2006, 18:16 PM

0 Miembros y 2 Visitantes están viendo este tema.

cobreti09

Hola estoy haciendo un programa en vb, y tengo un problema al intentar agregar registros a la bsd.

El programa tiene la opcion de crear una lista de peliculas o abrir una ya creada, y las visualiza en un datagrid.

Hasta aqui bien, en un principio use DAO para crear la bsd mas que nada por que es  mas sencillo pero tuve que cambiar a ADOX por que con DAO no podia usar el datagrid.

Y ahora con ADO tengo el problema de que no me deja añadir registros, me da el error :

"el recordset actual no admite actualizaciones"

da el error en cuanto lee la linea de

rs.addnew


os voy a poner la funcion que uso para crear una nueva lista de peliculas:

Private Function nuevo()
    If cn.State = 1 Then 'si existe ya una conexion con alguna lista la cierro
        cn.Close
    End If

    CommonDialog1.ShowOpen
    On Error GoTo etiqueta 'antes de conectar uso un control de errores por si ya existe una lista con ese nombre
'creo un catalogo
cat.Create "provider =microsoft.jet.oledb.4.0;data source=" & CommonDialog1.FileName & ";"

'asocio td (la tabla) con el catalogo
Set td.ParentCatalog = cat
td.Name = "peliculas"
'creo los campos y los anexo
fd1.Name = "COD"
td.Columns.Append fd1, adInteger
fd2.Name = "TITULO"
td.Columns.Append fd2, adVarChar
fd3.Name = "DIRECTOR"
td.Columns.Append fd3, adVarChar
fd4.Name = "PROTAGONISTA"
td.Columns.Append fd4, adVarChar
fd5.Name = "GENERO"
td.Columns.Append fd5, adVarChar
fd6.Name = "AÑO"
td.Columns.Append fd6, adInteger
fd7.Name = "SUBIDO POR"
td.Columns.Append fd7, adVarChar


cat.Tables.Append td 'pego la tabla
' Quitamos las referencias a las instancias de los objetos creados, para que no de problemas al volver a crear otra lista
Set cat = Nothing
Set td = Nothing
Set fd = Nothing

        a = MsgBox("Nueva lista " & CommonDialog1.FileName & " creada", vbOKOnly, "Videoteca DVD")



'conecto con la base de datos creada
cn.Open "provider =MSdatashape;data provider=microsoft.jet.oledb.4.0;data source=" & CommonDialog1.FileName & ";"

Set rs = New ADODB.Recordset 'defino un recordset

'me traigo todos los campos, estaran vacios ya que acabamos de crear la bsd
        rs.ActiveConnection = cn
        rs.Source = "select * from peliculas"
        rs.LockType = adLockOptimistic
        rs.CursorLocation = adUseClient
        rs.CursorType = adOpenKeyset
        rs.Open
       
        Set DataGrid1.DataSource = rs 'conecto el datagrid con el recordset
   
        'habilito los botones de añadir y eliminar
        mnuconsultar.Enabled = True
        mnueliminar.Enabled = True
    Exit Function
etiqueta:
    If Err.Number = -2147217897 Then 'controlo el error de sobrescritura
     a = MsgBox("Ya existe una base de datos con ese nombre", vbCritical, "Videoteca DVD")
    End If
   
End Function


ahi se ve como defino el recordset con bloqueo optimista y demas

luego con el boton de añadir registro tengo este codigo:

Private Sub Command4_Click()
    rs.AddNew
    For i = 0 To 5
        rs.Fields(i + 1).Value = Text1(i).Text
    Next
   
    rs.Update
    a = MsgBox("Añadido " & Text1(0).Text & "va tu lista", vbInformation, "Videoteca DVD")
   
    For i = 0 To 5
        Text1(i).Text = ""
    Next
    main.DataGrid1.Refresh
End Sub


Por si os sirve de algo tengo un modulo en el que declaro todo de forma publica

Public cn As New ADODB.Connection
Public rs As ADODB.Recordset
Public fd1 As New adox.Column
Public fd2 As New adox.Column
Public fd3 As New adox.Column
Public fd4 As New adox.Column
Public fd5 As New adox.Column
Public fd6 As New adox.Column
Public fd7 As New adox.Column
Public td As New Table
Public cat As New adox.Catalog


llevo todo el dia de ayer buscando una solucion y no la encuentro, ademas tengo otros programas que hice con adodb en los que si me funciona perfectamente el añadido de registros asi que estoy realmente jodio.

si me pudieran ayudar se lo agradeceria mucho

un saludo!


cobreti09

Bueno el error estaba en el proveedor, quitando el msdatashape y dejando el jet.ole.db ya funciona.

Yo pensaba que sin el msdatashape no funcionaba el datagrid ?¿?¿?