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
Código:
rs.addnew
os voy a poner la funcion que uso para crear una nueva lista de peliculas:
Código:
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
luego con el boton de añadir registro tengo este codigo:
Código:
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
Código:
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!